2

QStandardItemModelに関連付けられたQTableViewで選択されている行を判別する必要がありますビューから、関数selectionModel()を呼び出して選択を取得します。この関数は、QSelectionModelオブジェクトを返します。そのオブジェクトから、isRowSelected()関数を呼び出したいと思います。この関数は、テストする行とQModelIndexparentである引数の2つの引数を取ります。これは私が迷子になっているところです。この議論は何のためのものですか?それはどこから来たのですか?概念的には、なぜこのパラメーターが必要なのかわかりません。具体的には、関数を機能させるために関数に渡す必要のある値がわかりません。parent

4

1 に答える 1

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_())
于 2013-03-27T13:50:11.140 に答える