我需要确定与QTableView相关联的QStandardItemModel中选择的行。从视图中,我调用函数selectionModel()来获取选择。此函数返回QSelectionModel个对象。从那个对象,我想调用isRowSelected()函数。这个函数有两个参数:我要测试的行和parent
参数,它是QModelIndex。这就是我失去的地方。这个parent
论证是什么?它从何而来?从概念上讲,我不明白为什么我需要这个参数,具体来说,我不知道我应该传递给函数以使其工作的值。
答案 0 :(得分:1)
例如,您会在parent
中找到有用的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_())