Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何确定第一行和最后一行qt模型/视图_C++_Qt - Fatal编程技术网

C++ 如何确定第一行和最后一行qt模型/视图

C++ 如何确定第一行和最后一行qt模型/视图,c++,qt,C++,Qt,我正在基于QAbstractListModel和QListView构建一个文件浏览器 正如您所知,显示的内容可以通过使窗口变大或滚动来更改 如何确定实际显示的第一个和最后一个条目(或索引)。我必须自己编程吗 稍后添加: 有关完整说明,请参阅: 提前感谢, 斯蒂芬 沃尔堡 荷兰评论中提供的理由不充分;模型应该随时调用beginInsertRows/endInsertRows,即使您插入项目的范围当前在视图中不可见。这有多种原因(代理模型、QPersistentModelIndex实例、选择处理、

我正在基于QAbstractListModel和QListView构建一个文件浏览器

正如您所知,显示的内容可以通过使窗口变大或滚动来更改

如何确定实际显示的第一个和最后一个条目(或索引)。我必须自己编程吗

稍后添加:

有关完整说明,请参阅:

提前感谢,

斯蒂芬 沃尔堡
荷兰

评论中提供的理由不充分;模型应该随时调用
beginInsertRows
/
endInsertRows
,即使您插入项目的范围当前在视图中不可见。这有多种原因(代理模型、
QPersistentModelIndex
实例、选择处理、
QAbstractItemView
的内部管理、已呈现项的缓存等)


Qt中的MVCAPI的设计使得模型不应该知道视图当前显示的内容。
qabstractemmodel
中表示的契约规定,模型“just”必须通过调用受保护的方法(这些方法发出
行插入的
etc信号等)来保持世界其他地方的更新。如果您发现自己处于这样一种情况,即您开始思考“嘿,如果我知道此模型在附加视图中的显示方式就好了”,那么正确的做法是确保有效地使用现有的API。例如,一个非常常见的问题是程序员发现他们的模型的
data()
方法被调用得太频繁,例如,对于列表中的每个项。这样做的典型原因是,相应的
QListView
需要知道为每个项目保留多少空间,以便可以确定滚动条的大小。正确的方法是为
SizeIntrole
返回可用数据,或者将视图的
uniformRowSizes
设置为
true

您不是很清楚,为什么要知道第一个和最后一个条目?视图知道在任何特定时刻什么是可见的,并请求模型提供与之相关的数据。为什么我想知道第一项和最后一项对您很重要?当然,这是有原因的,但是太复杂了,无法解释,而且这个问题非常清楚和明显。我问这个问题是因为你的问题听起来像是一个典型的XY问题,所以我想在回答之前从你那里得到更多的细节。我建议你不要对完全合理的评论给出令人讨厌的回复,否则你可能会发现人们不愿意帮助你……好吧,你想要更多的细节。你为什么不这么说呢。你开始评论时说我不清楚。这不是很礼貌,如果不是直截了当的话,如果这只是你想要的更多细节的话。我建议你礼貌一点。好的,后端数据可以更改:条目可以添加、更改或删除。啊哈,非常感谢。您说模型不知道显示了什么(什么是有意义的),但这也适用于视图吗?没有像firstIndex和lastIndex这样的视图属性,以及这些属性更改时的sgnals??这将非常有用。视图显然知道它显示了什么。问题的关键在于,这种观点并没有让外界获得这些信息。我声称在大多数情况下,程序员实际上不需要知道,如果他们认为他们知道,他们通常是错的。好的,我认为我可以让它工作,但我必须使用一个额外的哈希表,它匹配一行的条目。这有点多余,我希望这不是必要的,因为已经有了索引。还有一个额外的威胁,它监视后端的更改并向模型发出正确的信号(删除/添加行…)。我不知道你在那里问什么,但是
internalId()
internalPointer()
是找到“该索引指向什么”的方法。
QModelIndex
只是传递该信息的一种临时方式。阅读Qt文档中的全部内容。