Python PyQt4:如何使用Qt.ItemIsTristate使用QTreeView自动选择子级?

Python PyQt4:如何使用Qt.ItemIsTristate使用QTreeView自动选择子级?,python,pyqt4,pyside,qtreeview,Python,Pyqt4,Pyside,Qtreeview,过去,我在QTreeWidget中使用Qt.ItemIsTristate标志,在用户选择某个项目时自动选择子项 以下是QTreeWidget的一个示例: import sys from PyQt4 import QtGui, QtCore from PyQt4.QtCore import Qt class MainForm(QtGui.QMainWindow): def __init__(self, parent=None): super(MainForm, self)

过去,我在QTreeWidget中使用Qt.ItemIsTristate标志,在用户选择某个项目时自动选择子项

以下是QTreeWidget的一个示例:

import sys
from PyQt4 import QtGui, QtCore
from PyQt4.QtCore import Qt

class MainForm(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(MainForm, self).__init__(parent)

        self.tree = QtGui.QTreeWidget()

        for k in range(0, 4):
            parent = self.tree

            for i in range(0, 4):
                item = QtGui.QTreeWidgetItem(parent)
                item.setText(0, "item %d %d" % (k, i) )
                item.setFlags(item.flags() | Qt.ItemIsTristate | Qt.ItemIsUserCheckable)
                item.setCheckState(0, Qt.Unchecked)

                parent = item

        self.tree.expandToDepth(4)

        self.setCentralWidget(self.tree)
        self.resize(200, 300)

def main():
    app = QtGui.QApplication(sys.argv)
    form = MainForm()
    form.show()
    app.exec_()

if __name__ == '__main__':
    main()
使用此代码,选中项目时,也会选中其所有子项

现在,我需要做同样的事情,但是使用QTreeView。 我已经测试了以下代码:

import sys
from PyQt4 import QtGui, QtCore
from PyQt4.QtCore import Qt

class MainForm(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(MainForm, self).__init__(parent)

        self.model = QtGui.QStandardItemModel()

        for k in range(0, 4):
            parentItem = self.model.invisibleRootItem()
            for i in range(0, 4):
                item = QtGui.QStandardItem("item %d %d" % (k,i) )
                item.setFlags(item.flags() | Qt.ItemIsTristate | Qt.ItemIsUserCheckable)
                item.setCheckState( Qt.Unchecked)

                parentItem.appendRow(item)
                parentItem = item

        self.view = QtGui.QTreeView()
        self.view.setModel(self.model)
        self.view.expandToDepth(4)

        self.setCentralWidget(self.view)
        self.resize(200, 300)

def main():
    app = QtGui.QApplication(sys.argv)
    form = MainForm()
    form.show()
    app.exec_()

if __name__ == '__main__':
    main()
使用此代码,选中项目时,不会选中其子项

您是否有任何关于将QTreeView/QStandardItem版本设置为与第一个示例中相同的工作方式的提示

我使用的是PyQt4.11

致以最良好的祝愿,
Elby

要选择特定模型索引的所有子项,需要执行以下操作

1) 启用多个选择 self.view.SetSelectionMode(QAbstractItemView::MultiSelection)

2) 使用“行计数”和“索引”方法沿树进行遍历

3) 使用选择模型对模型索引执行选择 self.view.SelectionModel().select(qmodelindex,QItemSelectionModel.select)


S:我使用C++ API,所以在案例和语法中可能有错误,

< >选择一个特定模型索引的所有子需要执行以下操作。 1) 启用多个选择 self.view.SetSelectionMode(QAbstractItemView::MultiSelection)

2) 使用“行计数”和“索引”方法沿树进行遍历

3) 使用选择模型对模型索引执行选择 self.view.SelectionModel().select(qmodelindex,QItemSelectionModel.select)

S:我使用C++ API,所以在语法和语法上可能有错误