0

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

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

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

后来补充:

完整描述见:

http://qt-project.org/forums/viewthread/26497/

提前致谢,

Stef Bon Voorburg 荷兰

4

1 回答 1

0

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

Qt 中的 MVC API 被设计为模型不应该知道视图当前显示的内容。合约中表达的合约QAbstractItemModel指定模型“只是”必须通过调用受保护的方法(rowsInserted除其他外发出 etc 信号)来保持世界其他地方的更新。如果您发现自己开始思考“嘿,如果我知道这个模型在附加视图中是如何显示的就好了”,正确的做法是确保您有效地使用现有的 API。例如,一个非常常见的问题是程序员发现他们的模型的data()方法被过于频繁地调用,例如,对于列表中的每个项目。造成这种情况的典型原因是相应的QListView需要知道为每个项目保留多少空间,以便确定滚动条大小。一个正确的方法是要么返回可用的数据SizeHintRole,要么将视图设置uniformRowSizestrue.

于 2013-04-08T09:52:42.990 回答