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

Alles rund um die Programmierung mit Qt
Antworten
QtNoob2008
Beiträge: 54
Registriert: 10. April 2008 08:27

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

Beitrag 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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
QtNoob2008
Beiträge: 54
Registriert: 10. April 2008 08:27

Beitrag 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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
jd
Beiträge: 130
Registriert: 22. Januar 2008 17:55

Beitrag 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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ja, sie werden immer in das interne QImage-Format konvertiert, das stimmt.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
QtNoob2008
Beiträge: 54
Registriert: 10. April 2008 08:27

Beitrag 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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
QtNoob2008
Beiträge: 54
Registriert: 10. April 2008 08:27

Beitrag von QtNoob2008 »

Habe dabei eher an QCache gedacht, wo ich meine Bilder als QImage Objekte direkt ablege (Keine Umwandlung von QPixmap-> QImage ) ...?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
QtNoob2008
Beiträge: 54
Registriert: 10. April 2008 08:27

Beitrag 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:
Antworten