QTableView - 滚动时更改选择

时间:2011-12-27 11:01:07

标签: qt4

我有一个QTableView。我希望在滚动时移动选择 - 因此光标始终可见。

enter image description here

QTableView.selectRow(rowNo),但你有建议在哪里打电话吗?

理想情况下,我希望滚动所选行位于中心。

2 个答案:

答案 0 :(得分:1)

您可以使用方法.indexAt(viewport()。pos())。您可能需要稍微修正一下位置。即按标题大小移动它。当你有索引时,你可以简单地调用.row()方法

答案 1 :(得分:0)

我是这样做的(PyQt4):

初始化后我连接到滚动条事件:

    self.tableView.verticalScrollBar().valueChanged.connect(self.onScroll)

然后在处理程序中:

def onScroll(self, *args):
    "Ensure that selected row moves when scrolling - it must be always visible."
    tableView = self.tableView
    currentRow = tableView.selectionModel().currentIndex().row()
    rect = tableView.viewport().rect()
    topRow = tableView.indexAt(rect.topLeft()).row()
    if currentRow < topRow:
        tableView.selectRow(topRow)
    else:
        bottomRow = tableView.indexAt(rect.bottomLeft()).row()
        if currentRow > bottomRow:
            tableView.selectRow(bottomRow)