2011-12-27 47 views
1

我有一个QTableView。我希望当我滚动时选择被移动 - 所以光标将始终可见。QTableView - 滚动时更改选择

enter image description here

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

理想情况下,我想滚动选中的行在中心。

回答

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) 
1

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