Qt.DecorationRole не показывает изображение

Dr.robot

self.icon = 'ico.png'
item = QTableWidgetItem(QtGui.QIcon(self.icon), "") item.setData(Qt.DecorationRole, item) self.table_widget.setItem(0, 0, item)

А когда оборачиваю в DisplayRole то показывает, но мне нужно именно в DecorationRole что бы потом сохранить.

1 ответ

Dr.robot

Согласно документации:

  • Qt.DisplayRole требует, чтобы передаваемый объект был приводим к типу QString (строке).
  • Qt.DecorationRole требует, чтобы передаваемый объект был приводим к одному из трёх следующих типов: QColor (цвету), QIcon (иконке), QPixmap (изображению).

Проблема заключается в том, что QTableWidgetItem приводим только к строке. Как результат, элемент-обёртка возвращает для setData() пустую строку вместо изображения.

Для решения данной проблемы необходимо убрать обёртку над экземпляром QIcon и передавать изображение непосредственно:

self.icon = 'ico.png'
item = QTableWidgetItem(QtGui.QIcon(self.icon), "") item.setData(Qt.DecorationRole, QtGui.QIcon(self.icon)) self.table_widget.setItem(0, 0, item)

licensed under cc by-sa 3.0 with attribution.