Seite 1 von 1

QListView Icons unterdrücken

Verfasst: 5. November 2009 11:15
von N¤X
Hi, ich hab ne QListView die ein Model darstellt das für die DecorationRole QIcons bereitstellt. Die Größe der angezeigten Icons will ich vom User wählbar machen aus drei Größen und der Option die Icons garnicht anzuzeigen.
Das mit den Größen tut auch wunderbar, aber wie kann ich die Icons unterdrücken? wenn ich ihre Size auf (0, 0) setze tut das zwar, bringt aber ne Debug Ausgabe vom QPainter sobald ich ein Listenelement markiere:

Code: Alles auswählen

QPainter::begin: Paint device returned engine == 0, type: 3
QPainter::setCompositionMode: Painter not active
QPainter::end: Painter not active, aborted
Das ist jetzt nicht weiter schlimm, es tut ja und der Verbraucher sieht davon nacher nix, aber wenn das ohne murren tun würde wärs mir lieber...
Gibts da also ne elegantere Art die Icons auszublenden? Hab bei QListView sonst nix zu Icons gefunden...

Verfasst: 5. November 2009 11:24
von archer
Was passiert wenn du im Model bei der DecorationRole QVariant() zurückgibst, also "nichts"?

Verfasst: 5. November 2009 11:58
von N¤X
Naja, dann zeigt er halt keine Icons an und meckert auch nicht, aber um das Anzeigen/Ausblenden darüber zu steuern müsste ich erstmal die Information dazu ins Model kriegen, und das scheint mir ein bisschen umständlich. Meine Umschaltfunktion sieht bisher so aus:

Code: Alles auswählen

void MyWidget::setIconSize(int n) {
   switch (n) {
      case 1:
         listView->setIconSize(QSize(16, 16));
         break;
      case 2:
         listView->setIconSize(QSize(24, 24));
         break;
      case 3:
         listView->setIconSize(QSize(32, 32));
         break;
      default:
         listView->setIconSize(QSize(0, 0));
         break;
   }
}
das ist ein Slot den ich an das buttonClicked(int) Signal von ner QButtonGroup gehängt hab. Wenn ich das Ein/Ausblenden jetzt über das Model mach brauch ich im Model noch ne extra Funktion setShowIcons(bool) und ne entsprechende Membervariable die das speichert, und dann müsste ich das in jedem Case entsprechend aufrufen.
Das würde funktionieren, und vllt mach ichs auch noch so, aber ich hoffe halt immernoch, dass man das auch ohne Eingriff ins Model lösen kann (keep it simple) :/
(thx für die schnelle Antwort, btw ^^)