我为QTableView
中的一列设置了自定义项代理。在某些情况下,我需要删除它(即设置默认项目委托)。但似乎QT不允许这样做。即使在设置新代表之后,也可以使用旧代表。 根据QItemDelegate
的QT文档,所有处理都应在同一代表中完成,但这可能会导致性能问题。有没有办法将QTableView
的项目代理移除/重置为默认值。从QTableView中删除QItemDelegate
2
A
回答
1
我在PyQt5中试过它(抱歉,我不能编写C++)。我可以将标准itemGategate设置为视图,然后将自定义itemDelegate设置为一列。通过使用“clicked”信号,我可以用标准itemDelegate代替这个列的自定义委托,反之亦然。
这是我的代码,也许它可以帮助:
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_())
+0
感谢您的答案。不幸的是,我不能使用python。唯一的选择是C++。 – 2015-03-30 11:51:58
+0
但是也许你可以发现你和我的代码之间使用方法或属性的重要区别并将它们转换为C++。 – 2015-03-30 14:11:00
相关问题
- 1. 删除在QTableView中
- 2. Qt为QTableView使用自定义QItemDelegate
- 3. Python - 从QSQLRelationalTableModel/QTableView删除选定的行
- 4. 用QItemDelegate显示QTableView中的其他数据
- 5. Qt删除QTableView中的选定行
- 6. 如何将QWidget与QItemDelegate和QTableView一起使用
- 7. 为QTableView QItemDelegate编辑器上的自定义小部件
- 8. 什么删除由自定义QItemDelegate创建的小工具
- 9. 如何删除pyqt中的qtableview中的行/行?
- 10. 如何清除QTableView
- 11. 如何将文本设置为与QTableView一起用作QItemDelegate的QLineEdit
- 12. 风格不QItemDelegate
- 13. SpinBoxDelegate和QItemDelegate
- 14. QTablevView和QItemDelegate
- 15. QListWidget或QListView与QItemDelegate?
- 16. 与QAbstractTableModel使用QItemDelegate
- 17. 无法从getContentResolver()中删除删除
- 18. 从UITextView中删除/删除NSTextAttachment
- 19. 从QGraphicsScene中删除/销毁/删除QGraphicsItem
- 20. 从表中删除,并删除文件
- 21. 从数据库中删除/删除
- 22. 从CHANGETABLE中删除
- 23. 从Openquery中删除
- 24. 从HashTable中删除
- 25. 从...中删除到
- 26. 从SQLite中删除
- 27. 从realurl中删除£
- 28. 从表中删除?
- 29. 从MultiSet中删除
- 30. 从列表中删除值从列表中删除
你试图调用setItemDelegate以0作为参数?或者可能存储默认的itemDelegate()并重新设置它? 文档状态,通过设置代表旧的不删除。 – nayana 2015-03-25 07:52:04
加上1为Pink Floyd封面。 – Iuliu 2015-03-25 08:11:04
是的,我已经尝试将项目代理设置为0;它没有效果,因为QTableView仍然使用旧版本。我还试着删除之前设置的委托,它会导致崩溃(即使使用deleteLater()方法) – 2015-03-25 08:32:55