PyQt4 - Menü wie in Kopete-Settings
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.
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!

Ein wichtiger Teil fehlt mir nun noch für das Menü: Icons - da könnte ich einen Tipp gebrauchen!

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.
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.
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
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