PySide QSelectionModel.isRowSelected()函数中的父是什么?

时间:2013-03-26 18:27:31

标签: python qt pyqt pyside

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

1 个答案:

答案 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_())