使用PyQt在QTableView中指定索引

时间:2011-11-16 19:45:31

标签: python pyqt

我有一个表,我希望在特定坐标处看到数据 - 比如第2行,第5列。我创建了一个QPoint对象,并设置了这些值,但是当它被转换为QModelIndex对象时,我得到了第0行和第1栏。

以下是代码:

    myQPoint = QPoint()
    myQPoint.setX(2)
    myQPoint.setY(5)
    myIndex = self.view.indexAt(myQPoint) # myIndex is a QModelIndex object
    print myQPoint.x(), myQPoint.y() # 2, 5
    print myIndex.row(), myIndex.column() # 0, 1

根据文档,indexAt“返回与内容坐标中位置pos处的表项对应的模型项的索引位置。”那么为什么myIndex的行和列值与myQPoint的x和y值不同?我究竟做错了什么?有没有办法简单地设置QModelIndex对象的行和列值?

谢谢! --Erin

2 个答案:

答案 0 :(得分:5)

如果要获取指定列和行的索引内容,请使用QTableView.model().index(row, column).data()

QTableView.model(row, column)会返回QModelIndex个对象(http://doc.qt.nokia.com/latest/qmodelindex.html),然后会有QModelIndex.data(role)个方法。您可以指定所需的角色(http://doc.qt.nokia.com/latest/qt.html#ItemDataRole-enum),但默认值为Qt.DisplayRole(显示文本是您在指定索引中看到的文本,假设您没有编辑单元格)。

答案 1 :(得分:2)

只是为了澄清为什么问题中的代码不起作用:

QTableView.indexAt返回屏幕上点的模型项(相对于表格小部件)。所以QPoint(2, 5)对应于tabel小部件内容左上角的两个像素和五个像素的点 - 这确实对应于第0行第一列的模型项!

所以你可以使用indexAt来获取当前鼠标光标下的模型项。

正如DK的回答中所提到的,在特定行/列中获取数据的方法是在表视图的model中查找索引。