首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从QTableView中删除QItemDelegate

从QTableView中删除QItemDelegate
EN

Stack Overflow用户
提问于 2015-03-25 15:45:38
回答 1查看 1.8K关注 0票数 2

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

EN

回答 1

Stack Overflow用户

发布于 2015-03-29 19:12:20

我在PyQt5中尝试过(对不起,我不会写C++)。我可以将标准itemGelegate设置为视图,然后将自定义itemDelegate设置为一列。通过使用“单击的”-signal,我可以用此列的标准itemDelegate替换自定义委托,反之亦然。

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

代码语言:javascript
复制
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_())
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29250020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档