我有一个表,我希望在特定坐标处看到数据 - 比如第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
答案 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中查找索引。