gpt4 book ai didi

c++ - 从 QTableView 中移除 QItemDelegate

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:19:02 24 4
gpt4 key购买 nike

我为 QTableView 的一列设置了自定义项委托(delegate)。在某些情况下,我需要将其删除(即设置默认项目委托(delegate))。但是QT好像不允许这样。即使在设置新委托(delegate)后,也会使用旧委托(delegate)。根据 QItemDelegate 的 QT 文档,所有处理都应在同一个委托(delegate)中完成,但这可能会带来性能问题。有什么方法可以删除/重置为默认 QTableView 的项目委托(delegate)。

最佳答案

我在 PyQt5 中尝试过(抱歉,我不会写 C++)。我可以将标准 itemGelegate 设置为 View ,然后将自定义 itemDelegate 设置为一列。通过使用“已点击”信号,我可以用此列的标准 itemDelegate 替换自定义委托(delegate),反之亦然。

custom delegate for column 0

changed to standard delegate

这是我的代码,也许它有帮助:

import sys
from PyQt5 import QtGui, QtCore, QtWidgets

class MyDelegate(QtWidgets.QStyledItemDelegate):
def __init__(self):
QtWidgets.QStyledItemDelegate.__init__(self)
self.AlignmentFlag = QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter
self.abstand = 2

def paint(self, painter, item, index):
rahmen = item.rect.adjusted(self.abstand, self.abstand, -self.abstand, -self.abstand)
eintrag = index.data()
painter.save()
painter.drawText(rahmen,self.AlignmentFlag, eintrag)
painter.restore()

class MyModel(QtCore.QAbstractTableModel):
def __init__(self,):
QtCore.QAbstractTableModel.__init__(self)
self.items = [['a0','a1','a2','a3','a4'],['b0','b1','b2','b3','b4'],['c0','c1','c2','c3','c4']]

def columnCount(self,items):
cc = len(self.items[0])
return cc

def rowCount(self,items):
rc = len(self.items)
return rc

def data(self, index, role=2):
return self.items[index.row()][index.column()]

class MyWidget(QtWidgets.QTableView):
def __init__(self):
QtWidgets.QTableView.__init__(self)
self.setModel(MyModel())
self.setGeometry(200,200,530,120)
self.delegate_1 = MyDelegate()
self.delegate_2 = QtWidgets.QStyledItemDelegate()
self.setItemDelegate(self.delegate_2)
self.setItemDelegateForColumn(0,self.delegate_1)
self.clicked.connect(self.changeDelegate)

def changeDelegate(self,index):
if index.column() == 0:
delegate_new = self.delegate_2 if self.itemDelegateForColumn(index.column()) == self.delegate_1 else self.delegate_1
self.setItemDelegateForColumn(index.column(),delegate_new)
else:
pass

app = QtWidgets.QApplication(sys.argv)
widget = MyWidget()
widget.show()
sys.exit(app.exec_())

关于c++ - 从 QTableView 中移除 QItemDelegate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29250020/

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