QTableWidget 作为 QTreeView 中的子级

问题描述 投票:0回答:2

我有一个 QTreeView,它通过 QSortFilterProxyModel 从 QAbstractItemModel 填充。

我已经实现了一个 DataStructure 类,它设置数据的父/子关系和一个 TreeView(QAbstractItemModel) 类 - 这工作得很好,并根据我的需要填充 QTreeView。

treeView 设置如下:

from PyQt4 import QtCore, QtGui
import data_Model

#DataStructure(data, parent=None)
rootNode = data_Model.DataStructure('_Holder')

for i in mainData:
    mainRow = data_Model.DataStructure(i, rootNode)
    for j in subData:
        data_Model.DataStructure(j, mainRow)

self._proxyModel = QtGui.QSortFilterProxyModel()
self._model = data_Model.TreeModel(rootNode)
self._proxyModel.setSourceModel(self._model)

self.treeView.setModel(self._proxyModel)

我想更改此设置,以便将 subData 填充到 QTableWidget 中,该 QTableWidget 是特定列索引的相关 mainRow 的子级

我的尝试是删除:

    for j in subData:
        data_Model.DataStructure(j, mainRow)

从上面,每次设置主模型时调用下面的:

def addChild(self, subData):

    rowCount = self._proxyModel.rowCount()
    widgetDict = {}

    for i in range(rowCount):

        for j in range(len(subData)):

            #set model index as current row and column 5 onwards
            modelIndex = self._proxyModel.mapToSource(self._proxyModel.index(i, 5 + j))
            widgetDict[str(i) + str(j)] = QtGui.QListWidget().addItems(subData[j])

            self.treeView.setIndexWidget(modelIndex, widgetDict[str(i) + str(j)])

setIndexWidget 调用似乎没有效果。我确信这是一种完全落后的方法,但我尝试将 QListWidget 包含在 data_Model 中却惨遭失败。任何关于如何解决这个问题的指导(或者如果可能的话!)或具体建议将不胜感激。

python qt pyqt4 qtablewidget qtreeview
2个回答
1
投票

不确定代码的其余部分,但行:

    widgetDict[str(i) + str(j)] = QtGui.QListWidget().addItems(subData[j])

将创建并填充一个列表小部件,然后将其丢弃并将

None
添加到
widgetDict

您可能想要更多类似的东西:

    widget = QtGui.QListWidget()
    widget.addItems(subData[j])
    widgetDict[str(i) + str(j)] = widget
    self.treeView.setIndexWidget(modelIndex, widget)

0
投票

正如@ekhumoro所指出的, modelIndex.model() 和 treeView.model() 需要相同。我试图将 _proxyModel 映射回 _model,这就是问题所在

改变这个:

modelIndex = self._proxyModel.mapToSource(self._proxyModel.index(i, 5 + j))

对此:

modelIndex = self._proxyModel.index(i, 5 + j))

问题解决了

© www.soinside.com 2019 - 2024. All rights reserved.