PySide中的parent是什么QSelectionModel.isRowSelected()功能?

2024-09-30 10:30:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要确定在与QStandardItemModel关联的QTableView中选择了哪些行。在视图中,我调用函数selectionModel()来获得选择。此函数返回一个QSelectionModel对象。从那个对象,我想调用isRowSelected()函数。此函数接受两个参数:我要测试的行和一个parent参数,这是一个QModelIndex。这就是我迷路的地方。这个parent参数的作用是什么?它是从哪里来的?从概念上讲,我不明白为什么需要这个参数,具体地说,我不知道应该传递给函数什么值才能使它工作。在


Tags: 对象函数视图概念参数地方parent调用函数
1条回答
网友
1楼 · 发布于 2024-09-30 10:30:31

例如,parentQTreeView中很有用。对于您的用例,以下是文档的相关部分:

The index is used by item views, delegates, and selection models to locate an item in the model
...
Invalid indexes are often used as parent indexes when referring to top-level items in a model."

使用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_())

相关问题 更多 >

    热门问题