鉴于我有一个 QTableView 实例(或其子类),连接到 QAbstractTableModel 的子类(或功能等效的模型+视图),是否可以获得当前对用户可见的所有行的索引列表(即那些不超出当前滚动范围的)?
如果解决方案可以扩展到不同的窗口/屏幕尺寸,那就太好了。
您可以使用 获取项目位置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
.