gpt4 book ai didi

python - 如何为代理模型处理的模型中的多个列设置项目委托(delegate)?

转载 作者:太空狗 更新时间:2023-10-30 02:25:59 26 4
gpt4 key购买 nike

我这样设置我的项目代表:

COMBOBOX_ITEMS_FRUITS = ['Apple', 'Banana']
COMBOBOX_ITEMS_COLORS = ['Red', 'Green', 'Blue']

self.treeview.setItemDelegateForColumn(COLUMN_A, ComboBoxDelegate(COMBOBOX_ITEMS_FRUITS))
self.treeview.setItemDelegateForColumn(COLUMN_B, ComboBoxDelegate(COMBOBOX_ITEMS_COLORS))

将模型设置为代理模型的源模型后,我的应用程序崩溃但未抛出任何错误:

self.model_source = treeview_model
self.sf_proxy_model.setSourceModel(self.model_source)

当使用sortfilterproxymodel 处理源模型时,我似乎只能使用一个setItemDelegateForColumn

ComboBoxDelegate 定义如下:

class ComboBoxDelegate(QStyledItemDelegate):
def __init__(self, items):
super(ComboBoxDelegate, self).__init__()

self.items = items

def createEditor(self, parent, option, index):
editor = QComboBox(parent)
editor.setAutoFillBackground(True)

for item in self.items:
editor.addItem(item)

return editor

def setEditorData(self, editor, index):
current_index = editor.findText(index.model().data(index), Qt.MatchExactly)
editor.setCurrentIndex(current_index)

def setModelData(self, editor, model, index):
item_index = model.mapToSource(index)
item = model.sourceModel().item(item_index.row(), 0)

if index.parent().row() == -1 and item.hasChildren():
for row in range(item.rowCount()):
child = item.child(row, 3)
child.setText(editor.currentText())

model.setData(index, editor.currentText())

def updateEditorGeometry(self, editor, option, index):
editor.setGeometry(option.rect)

最佳答案

TreeView 不拥有委托(delegate)的所有权,因此您必须自己保留对它的引用(否则它将被 python 垃圾回收):

    self.delegate1 = ComboBoxDelegate(COMBOBOX_ITEMS_FRUITS)
self.delegate2 = ComboBoxDelegate(COMBOBOX_ITEMS_COLORS)
self.view.setItemDelegateForColumn(COLUMN_A, self.delegate1)
self.view.setItemDelegateForColumn(COLUMN_B, self.delegate2)

关于python - 如何为代理模型处理的模型中的多个列设置项目委托(delegate)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46746551/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com