PyQt4 - Menü wie in Kopete-Settings

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Kelhim
User
Beiträge: 16
Registriert: Donnerstag 17. Mai 2007, 13:18
Wohnort: Köln

Hallo - ich würde gerne mit PyQt4 ein Menü wie dieses hier ganz links in den Kopete-Einstellungen verwenden, finde aber keine Klasse in der Doku. Ich kann mir irgendwie nicht vorstellen, dass ich so etwas selber bauen muss. Nachdem ich mich dort dusselig gesucht habe, hoffe ich hier auf Hilfe!
Zuletzt geändert von Kelhim am Samstag 14. März 2009, 20:20, insgesamt 1-mal geändert.
Benutzeravatar
C4S3
User
Beiträge: 292
Registriert: Donnerstag 21. September 2006, 10:07
Wohnort: Oberösterreich

Sieht aus wie ein QIconView, finde ich.
Gruß!
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

QIconView gibt es nicht mehr in PyQt4, glaub ich.
Den View solltest Du mit einem QListView mit viewMode = iconMode umsetzen können. (Im Zweifelsfalle müßtest Du das mal in den Kopetequellen nachschlagen)
Kelhim
User
Beiträge: 16
Registriert: Donnerstag 17. Mai 2007, 13:18
Wohnort: Köln

Vielen Dank für die Antworten! Es ist, wie jerch schreibt, man kann so etwas mit QListView oder QListWidget umsetzen. Ich habe mich für QListView entschieden, weil ich gerne HTML in den Item-Strings der Liste interpretiert haben möchte. Das könnte ich vielleicht auch mit QListWidget über Style Sheets erreichen, aber ich bastele gerade ein bisschen zur Übung. ;)

Ein wichtiger Teil fehlt mir nun noch für das Menü: Icons - da könnte ich einen Tipp gebrauchen! ;)
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Wenn Du eigentlich nur die Kopetesache "nachbauen" willst, warum dann das Rad neu erfinden? Mit QListWidget bringt Qt da doch schon alles nötige mit (ist ja auch von QListView abgeleitet). QListWidgetItem hat den Icon-Support an Board.
Und eine fehlende Funktionalität in QListWidgetItem hast Du wahrscheinlich schneller in einer hiervon abgeleiteten Klasse hinzugefügt als die Hälfte von QListWidget und QListWidgetItem nachimplementiert.
Just my 2 cents.
Kelhim
User
Beiträge: 16
Registriert: Donnerstag 17. Mai 2007, 13:18
Wohnort: Köln

Jetzt habe ich die Menü-Bar genau so, wie ich sie haben wollte: Die minimale Größe der View leitet sich von der Größe der Items darin ab - wenn die View aber vergrößert wird, "wachsen" die Items horizontal oder vertikal (je nach Flow) mit, sodass die Liste immer gänzlich mit Items ausgefüllt ist. Außerdem hat jedes Item die größte Breite bzw. Höhe (wieder je nach Flow), die in der gesamten Liste auftaucht.

Habe da mit QListView.resizeEvent(), QStyledItemDelegate.sizeHint() und einer eigenen Methode im Delegate, die alle Item-Größen in einem Dictionary sammelt, gespielt.

Ärgerlich war nur die Tatsache, dass QWidget.setStyleSheet() oder irgendeine der darin aufgerufenen Methoden einmal sizeHint() des Delegates aufruft und mir also zuerst die unformatierten Items (nicht bold, kleiner Schriftgröße) mit dementsprechend kleineren Größen zurückgab. Bis ich das einmal herausfand, hatte ich schon die Qt-Source-Dateien nach einem Hinweis durchsucht.

Das alles konnte ich nicht mit einem ListWidget erreichen, zumindest weiß ich nicht, wie. Und als Einstieg ins Model-/View-Konzept war es ganz brauchbar.

Naja, so sieht's aus: Bild 1 Bild 2 Bild 3 Bild 4
Antworten