我需要确定在与QStandardItemModel关联的QTableView中选择了哪些行。从视图中,我调用函数selectionModel()来获取选择。此函数返回一个QSelectionModel对象。从那个对象,我想调用isRowSelected()函数。这个函数有两个参数:我要测试的行和一个参数,它是一个QModelIndex。这就是我迷路的地方。这个论点是为了什么?它从何而来?从概念上讲,我不明白为什么我需要这个参数,具体来说,我不知道应该将什么值传递给函数以使其工作。parent
parent
问问题
545 次
1 回答
1
例如,您会parent
在 a 中找到有用的QTreeView
。对于您的用例,这是文档的相关部分:
项目视图、委托和选择模型使用索引来定位模型中的项目
......
在引用模型中的顶级项目时,无效索引通常用作父索引。”
随着QtCore.QModelIndex()
您将创建一个无效的索引,这就是您正在寻找的论点。在此示例中,您可以使用上下文菜单打印行的选择状态:
#!/usr/bin/env python
#-*- coding:utf-8 -*-
from PyQt4 import QtGui, QtCore
class MyWindow(QtGui.QTableView):
def __init__(self, parent=None):
super(MyWindow, self).__init__(parent)
self.modelSource = QtGui.QStandardItemModel(self)
for rowNumber in range(3):
items = []
for columnNumber in range(3):
item = QtGui.QStandardItem()
item.setText("row: {0} column: {0}".format(rowNumber, columnNumber))
items.append(item)
self.modelSource.appendRow(items)
self.actionSelectedRows = QtGui.QAction(self)
self.actionSelectedRows.setText("Get Selected Rows")
self.actionSelectedRows.triggered.connect(self.on_actionSelectedRows_triggered)
self.contextMenu = QtGui.QMenu(self)
self.contextMenu.addAction(self.actionSelectedRows)
self.setModel(self.modelSource)
self.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
self.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows)
self.horizontalHeader().setStretchLastSection(True)
self.customContextMenuRequested.connect(self.on_customContextMenuRequested)
@QtCore.pyqtSlot(bool)
def on_actionSelectedRows_triggered(self, state):
for rowNumber in range(self.model().rowCount()):
info = "Row {0} is ".format(rowNumber)
if self.selectionModel().isRowSelected(rowNumber, QtCore.QModelIndex()):
info += "selected"
else:
info += "not selected"
print info
@QtCore.pyqtSlot(QtCore.QPoint)
def on_customContextMenuRequested(self, pos):
self.contextMenu.exec_(self.mapToGlobal(pos))
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
app.setApplicationName('MyWindow')
main = MyWindow()
main.resize(333, 222)
main.show()
sys.exit(app.exec_())
于 2013-03-27T13:50:11.140 回答