У меня есть настраиваемый делегат элемента для одного столбца для QTableView
. В некоторых случаях мне нужно удалить его (т. Е. Установить делегат по умолчанию). Но, похоже, QT этого не позволяет. Старый делегат используется даже после установки нового. Согласно документации QT для QItemDelegate
вся обработка должна выполняться в том же делетете, но это может привести к проблемам с производительностью. Есть ли способ удалить/сбросить значение по умолчанию делегата элемента для QTableView
.Удалите QItemDelegate из QTableView
ответ
Я попробовал это в PyQt5 (извините, им не удалось написать C++). Я мог бы установить стандартное itemGelegate в представление, а затем установить пользовательский элемент itemDelegate в один столбец. Используя «clicked» -signal, я могу заменить пользовательский делегат стандартным 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_())
Спасибо за ответ. К сожалению, я не могу использовать python. Единственный вариант - C++. –
Но, возможно, вы можете найти важные различия между вашим и моим кодом при использовании методов или атрибутов и перевести их на C++. –
- 1. Qt Использование пользовательского QItemDelegate для QTableView
- 2. Удалите вертикальные линии сетки из QTableView
- 3. Размер редактора в QItemDelegate
- 4. QTablevView и QItemDelegate
- 5. Удалите несколько строк в QTableView + QAbstractItemModel
- 6. QItemDelegate с настраиваемым видом виджета
- 7. Как создать combo-box QItemDelegate
- 8. Как подключить QItemDelegate (QLineEdit) к QSortFilterProxyModel PyQt4?
- 9. краска очищает данные в qtableview
- 10. Форматирование данных в QTableView
- 11. При закрытии редактора QItemdelegate сдвигает элемент вправо
- 12. Qt: Создайте QItemDelegate, чтобы иметь собственный редактор (Combo Boxes) в QTableView с QStandardItemModel
- 13. Ошибка из QTableView SelectionChanged
- 14. Получить данные из QTableView
- 15. Удаление виджета из QTableView
- 16. Перетаскивание из унаследованного QTableView
- 17. Как установить текст в QLineEdit, когда он используется как QItemDelegate с QTableView
- 18. Как обновить (setvalue, сортировка, редактирование, цвет фона) QProgressBar (QitemDelegate) внутри QTableview (QAbstractTableModel)
- 19. Высота редактора в QItemDelegate
- 20. контрольный размер QItemDelegate динамически
- 21. Установить QItemDelegate на конкретный QTreeWidgetItem
- 22. PyQt4 - QTableView - Как перебрать QTableView
- 23. QTreeView, QItemDelegate & обновить другой товар?
- 24. Вкладка для не редактируемых ячеек в QtableView
- 25. Приобретать строки данных из QTableView
- 26. Перетаскивание элемента из QTableView/QSqlTableModel
- 27. Как получить данные из QTableView?
- 28. Qt - QTableView - кнопка Clickable в строке таблицы
- 29. QItemDelegate: повернуть текст 90 градусов
- 30. Использование пользовательского QItemDelegate с QSortFilterProxyModel
вы пытались вызвать setItemDelegate с 0 в качестве аргумента? или, возможно, сохранить элемент itemDelegate() по умолчанию, а затем снова установить его? Документы заявляют, что, установив делегат, старый не удаляется. – nayana
Plus 1 для крышки Pink Floyd. – Iuliu
Да, я пробовал установить делегат пункта в 0; это не имеет никакого эффекта, поскольку QTableView все еще использует старый. Кроме того, я пытался удалить набор делегатов раньше, он приводит к сбою (даже с использованием метода deleteLater()) –