1

鉴于我有一个 QTableView 实例(或其子类),连接到 QAbstractTableModel 的子类(或功能等效的模型+视图),是否可以获得当前对用户可见的所有行的索引列表(即那些不超出当前滚动范围的)?

如果解决方案可以扩展到不同的窗口/屏幕尺寸,那就太好了。

4

1 回答 1

2

您可以使用 获取项目位置QAbstractItemView::visualRect。它在视口坐标中,所以我们需要检查它是否在视口矩形中。这是一个例子:

viewport_rect = QRect(QPoint(0, 0), self.view.viewport().size())
for row in range(0, self.model.rowCount()):
  rect = self.view.visualRect(self.model.index(row, 0))
  is_visible = viewport_rect.intersects(rect)

此示例仅适用于一列,但您可以添加一个for循环以遍历所有列。

在此代码中,如果项目部分可见,则它们被视为可见。如果您只想获取完全可见的项目,请使用contains而不是intersects.

于 2013-07-11T22:32:29.407 回答