Hallo - um mich etwas in das Model/View-Konzept einzuarbeiten, bastele ich gerade an einer Subklasse von QListView. Bisher hab ich es zumindest ohne Anleitung geschafft, QItemDelegate.sizeHint() so zu bearbeiten, dass die Größe der Liste sich an der Breite bzw. der Höhe des längsten/höchsten Items orientiert.
Ich verstehe nun aber nicht, wie ich diesen Items ein Icon zur Seite stellen kann. Aus der Doku zu QPainter werde ich irgendwie nicht richtig schlau.
Kann mir jemand weiterhelfen?
[PyQt4] Icons in QListView
Warum implementierst du nicht einfach ein Model, dass für ".data()" ein Icon zurückgibt, wenn der "role"-Parameter Qt.DecorationRole ist?
Für Icons benötigt man eigentlich weder ein Unterklasse von QListView noch einen eigenen Delegate, sondern nur ein eigenes Modell.
Für Icons benötigt man eigentlich weder ein Unterklasse von QListView noch einen eigenen Delegate, sondern nur ein eigenes Modell.
Dank QTextDocument.setHtml(text) im Delegate kann ich Bilder einfach mit "<img src='/pfad/zum/icon.png'>" hinzufügen. Das wäre die schnelle, unkomplizierte Lösung für mich derzeit.
Ich würde aber gerne lernen, wie es "eigentlich" geht.
@lunar: Die Strings übergebe ich dem Model derzeit als Liste über __init__(). Mir ist aber nicht klar, wie ich da bei Icons vorgehe.
Ich würde aber gerne lernen, wie es "eigentlich" geht.
@lunar: Die Strings übergebe ich dem Model derzeit als Liste über __init__(). Mir ist aber nicht klar, wie ich da bei Icons vorgehe.
In dem du ein eigenes Model implementierst, dass von QAbstractListModel ableitet und ".data()" entsprechend überschreibt. Ich habe mal ein ziemlich einfaches Beispiel zusammengeschrieben ...
Danke, lunar! Mit QPainter hatte ich Anfangserfolge (mir geht's ja vor allem darum, zu lernen), aber das hier ist eindeutig vorzuziehen.
Falls das hier irgendwann jemand nachliest ...
Falls das hier irgendwann jemand nachliest ...
Code: Alles auswählen
#Subklasse von QAbstractListModel
def data(self, index, role=Qt.DisplayRole):
if index.isValid():
name, icon = self.list_[index.row()]
if role == Qt.DisplayRole:
return QVariant(name)
elif role == Qt.DecorationRole:
return QVariant(icon)
else:
return QVariant()
else:
return QVariant()