我爲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