滚动QTableWidget到特定列

5 投票
1 回答
4375 浏览
提问于 2025-04-17 12:48

我在一个QTableWidget里有很多数据,我想要能够滚动到某一特定的列。目前我使用的是scrollToItem(self.item(0, col)),但是这个方法把行数死死定在了0。如果用户正在查看第100行,然后想滚动到某一列,这样就会导致他们在表格中的垂直位置丢失。

有没有办法找到用户当前在QScrollArea中查看的是哪一行?如果能找到,我就可以把默认的行数换成正确的行数。

也许还有其他方法可以实现这个效果,比如使用.ensureWidgetVisible()?不过我不太确定怎么才能找到我想要滚动到的正确的控件,或者让它变得可见。

1 个回答

4

一种方法是先找到第一个可见行的行索引,然后用这个索引去查找你想要滚动到的列中的第一个可见项目:

def scrollToColumn(self, column=0):
    visible = self.itemAt(0, 0)
    if visible is not None:
        self.scrollToItem(self.item(visible.row(), column))

因为你要滚动到的项目所在的行已经可见,所以视图不应该自己垂直滚动(除非verticalScrollMode设置为ScrollPerPixel,并且坐标(0, 0)的项目没有完全显示出来)。

撰写回答