Seite 1 von 1

Erhöhung der Performance durch QPixmapCache, QCache ???

Verfasst: 16. April 2008 08:27
von QtNoob2008
Hallo,

ich habe eine Frage bzgl. der oben genannten Klassen. Ich verwende viele Bilder in meiner Applikation (*.png) die sich in einer Ressource befinden und per Stylesheet in die Applikation, bzw. den Widgets als "backgroud-image" zugewiesen werden.

Die Anwendung soll auf einem PC aber auch auf einem Embedded System (mit Touchscreen) verwendet werden.

Besitzen die genannten Klassen einen Performance Vorteil (z.B. Erhöhung der Darstellungsgeschwindkeit) gegenüber der Variante "Stylesheet/Ressource"die ich jetzt verwende. Gibt es performantere Möglichkeiten?? Hat jmd. Erfahrung in diesem Bereich?
Vielen Dank im voraus !!

Gruß QtNoob2008

Verfasst: 16. April 2008 08:51
von Christian81
Ein Cache lohnt sich nur wenn die Bilder mehr als n mal geladen werden. Wenn Du sie also nur einmal lädst lohnt es sich überhaupt nicht bzw. verbraucht nur Speicher. Der Cache ermöglicht nur, dass Du ein Bild nicht von Platte laden und umwandeln musst - mehr nicht.

Verfasst: 16. April 2008 09:49
von QtNoob2008
Hi Christian81,

Danke für die schnelle Antwort !!!
Also würde es wohl für meinen Fall nix bringen!
Die Bilder werden nur einmal(!) beim Start geladen über "setStyleSheet()". Der Style wird auch nicht zur Laufzeit umgestellt oder so...

Dabei bekommt z.B. die Klasse "QPushButton" ein Bild zugewiesen was z.B. auf allen Buttons (also n-mal) verwendet wird. Zudem wird das Hintergrundbild z.B. beim "hover"-Effekt verändert. Weißt du vielleicht ob die Anwendung auf die lokal liegenden Ressource zugreift oder befindet sich diese im Speicher ?

Gruß QtNoob2008

Verfasst: 16. April 2008 09:52
von Christian81
Die Resource wird sich im Speicher befinden. Wenn das Bild dort allerdings als z.B. png vorliegt muss es bei jedem Setzen nach QImage/QPixmap konvertiert werden. Kommt natürlich darauf an wie oft das nötig ist und wie viel Speicher die Bilder benötigen - aber da könnte es sich ggf. lohnen einen QPixmapCache zu benutzen.

Verfasst: 16. April 2008 09:55
von jd
In welchem Format sollten die Bilder vorliegen, damit sie nicht konvertiert werden? Bei mir sind alle Bilder im .png-Format. Werden die Bilder nicht immer konvertiert, egal welches Format, oder irre ich mich da jetzt?

so long

Verfasst: 16. April 2008 10:05
von Christian81
Ja, sie werden immer in das interne QImage-Format konvertiert, das stimmt.

Verfasst: 16. April 2008 15:06
von QtNoob2008
Vielen Dank für die Hilfe!

Werde es dann vielleicht mal ausprobieren mit dem QPixmapCache, wenn es über die Ressource nicht performant genug ist. Dann sollte man wohl alle Bilder direkt als QImage ablegen oder ?

Gruß QtNo02008

Verfasst: 16. April 2008 15:14
von Christian81
Warum wird das Ding wohl QPixmapcache heißen?

Die Konvertierung von QImage nach QPixmap und umgekehrt braucht auch Zeit - also möglichst vermeiden.

Verfasst: 16. April 2008 15:31
von QtNoob2008
Habe dabei eher an QCache gedacht, wo ich meine Bilder als QImage Objekte direkt ablege (Keine Umwandlung von QPixmap-> QImage ) ...?

Verfasst: 16. April 2008 15:38
von Christian81
Stimmt, Du machst es ja über css und url() - da hilft Dir kein Cache etwas da Du ja nicht auf die internas des css eingehen kannst.
Ich hätte es ohne css aber dafür mit QWidget::backgroundRole () realisiert.

Verfasst: 16. April 2008 16:00
von QtNoob2008
ja genau, im Stylesheet lege ich Fest wie die QPushButtons aussehen sollen. Also z.B. ein "*.png" als background für alle QPushButton. Im Stylesheet wird angegeben wo sich die Bilder befinden url(:/Ressourcendatei.qss)...

Die derzeitige Realisierung mit "css" würde ich verwerfen :? , wenn QPixmapCache oder QCache performanter ist.

Habe gerade mal nach QWidget::backgroundRole () geschaut. Verstehe da nun gar nicht wie ich das für meine Zwecke verwenden könnte ...
QPalette::ColorRole QWidget::backgroundRole () const
Returns the background role of the widget.
The background role defines the brush from the widget's palette that is used to render the background.
Kannst du mir das bitte genauer Erklären ? :wink: