Seite 1 von 1

Eigenen Skin zeichen

Verfasst: 26. Juli 2005 20:29
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

Verfasst: 27. Juli 2005 00:57
von lepsai
benutze Double Buffering....

Verfasst: 27. Juli 2005 01:02
von Nassian
Ich verwende Qt4 und da wird jegliche Ausgabe (meines Wissens nach zumindest) double gebuffert.

Verfasst: 27. Juli 2005 01:04
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...

Verfasst: 27. Juli 2005 01:10
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]

Verfasst: 27. Juli 2005 01:13
von lepsai
Qt::WNoAutoErase gesetzt?

Verfasst: 27. Juli 2005 01:19
von Nassian
Gibts in Qt4 nicht mehr, da ja ohnehin DoubleBuffering genutzt wird; siehe Doku.

Verfasst: 27. Juli 2005 01:24
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...

Verfasst: 27. Juli 2005 01:29
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

Verfasst: 27. Juli 2005 13:37
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.

Verfasst: 27. Juli 2005 13:41
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...