Eigenen Skin zeichen

Alles rund um die Programmierung mit Qt
Antworten
Nassian
Beiträge: 126
Registriert: 20. Juni 2005 21:14

Eigenen Skin zeichen

Beitrag von Nassian »

Hi,
Derzeit überschreibe ich bei einem Programm das paintEvent um einen eigenen "Skin" zu bekommen; für ein eigenes QStyle ist es zu unspektakulär (nur 3 Buttons die anders aussehen als default). Doch mein Problem ist die Titlebar welche ich zuerst so realisierte, dass ich einfach ein 1*24 Pixel großes Bild hatte und dieses in einer Schleife über die gesamte Breite zeichne. Allerdings ist das ganze beim resize ziemlich lahm. Also dachte ich mir dieses Bild beim starten des Programms gleich mit 1024*24 zu initialisieren und im paintEvent einfach nur einmal zu zeichnen. Doch auch mit dieser Methode ruckelt das resizen des Fensters.
Kennt jemand eine effizientere Methode?
Mfg,
Alex
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag von lepsai »

benutze Double Buffering....
Nassian
Beiträge: 126
Registriert: 20. Juni 2005 21:14

Beitrag von Nassian »

Ich verwende Qt4 und da wird jegliche Ausgabe (meines Wissens nach zumindest) double gebuffert.
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag von lepsai »

Alter Schwede, geh schlafen du Eule :)

Das stimmt zwar, aber ich würde es trotzdem versuchen, schaden kann es ja nicht. Und poste mal deinen Code...
Nassian
Beiträge: 126
Registriert: 20. Juni 2005 21:14

Beitrag von Nassian »

Ich schlafe nur einmal die Woche :-)


Im Konstruktor:

Code: Alles auswählen

TitleBarLeft = QPixmap( ":/Data/Graphics/Style/titlebar_left.png" ).scaledToHeight( 24 );
	TitleBarExtender = QPixmap( ":/Data/Graphics/Style/titlebar_ext.png" ).scaled( 512, 24 );
	TitleBarRight = QPixmap( ":/Data/Graphics/Style/titlebar_right.png" ).scaledToHeight( 24 );
paintEvent:

Code: Alles auswählen

painter.drawPixmap( 0, 0, TitleBarLeft );
	painter.drawPixmap( TitleBarLeft.width(), 0, TitleBarExtender );
	painter.drawPixmap( this->width() - TitleBarRight.width(), 0, TitleBarRight );
[/i]
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag von lepsai »

Qt::WNoAutoErase gesetzt?
Nassian
Beiträge: 126
Registriert: 20. Juni 2005 21:14

Beitrag von Nassian »

Gibts in Qt4 nicht mehr, da ja ohnehin DoubleBuffering genutzt wird; siehe Doku.
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag von lepsai »

hm, ich hab mit Qt 4 noch nicht gearbeitet, daher kann ich nur empfehlen, per Hand nachzubauen.... Übrigens vielleicht funktioniert das periodische Zeichnen schneller, wenn du drawTiledPixmap() benutzen würdest...
Nassian
Beiträge: 126
Registriert: 20. Juni 2005 21:14

Beitrag von Nassian »

Hilft auch nichts, trotzdem danke.
Ich hoffe, dass jemand eine Lösung für mein Problem hat, denn es wäre wirklich wichtig.
Mfg,
Alex
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Kannst Du das Pixmap nicht als Hintergrundpixmap von deinem Titlebar setzen? In Qt3 gab es die Funktion QWidget::SetBackroundMode() welche es erlaubte ein BackgroundPixmap zu setzen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Nassian
Beiträge: 126
Registriert: 20. Juni 2005 21:14

Beitrag von Nassian »

Wie soll ich das machen? Die Titlebar *ist* das Pixmap, da is kein eigenes Widget.
Aber wenn noch Zeit ist, werde ich mal versuchen das umzubauen, bzw. nachsehen ob es das in Qt4 noch gibt.

edit: Ich quäle mal den Trolltechsupport, wofür zahlt man denn...
Antworten