Hallo,
ich schlage mich gerade mit den Stylesheets herum:
Wenn ich zum Beispiel einen Farbverlauf für einen gecheckten Button über setStyleSheet setze
QPushButton:checked{
background-color:qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0
rgb(110,110,110,255), stop: 0.2
rgba(200, 200, 200,255), stop:1
rgb(255, 255, 255, 255));
color:black;
border-color:black;
}
funktioniert das soweit prima, der Button wird wie gewünscht gezeichnet.
Ich möchte aber jetzt die Zeichenroutine des Buttons selber schreiben, weil mein Button keine Standardform hat. Dabei möchte ich die gesetzten Styles auslesen, und z.B. die entsprechenden Attribute wie Brush, Textfarbe, Font etc. verwenden.
Gibt es irgendwo eine Beschreibung, wie ich im paintEvent einer von QPushButton abgeleiteten Klasse, die gesetzten Styleattribute auslesen kann, oder kennt jemand eine andere Methode um Steuerelemente mit exotischem Aussehen unter der Berücksichtung von Stylesheets selber zu zeichnen? Samples wie "NorwegianWood" haben mir nicht weitergeholfen, weil hier nicht auf Stylesheet Properties eingegangen wird.
Vielen Dank für eure Hilfe,
setStyleSheet Attribute wieder auslesen
-
Helmut Berg
- Beiträge: 6
- Registriert: 23. Februar 2010 10:03
- Wohnort: Darmstadt
Naja.. ich würde davon ausgehen, dass QPushButton beim Setzten des Stylesheets halt einfach die entsprechenden Membervariabeln (in diesem Fall die Palette) entsprechend setzt...im paintEvent einer von QPushButton abgeleiteten Klasse
Die drei Farben in deinem Beispiel
QPushButton:checked{
background-color:qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0
rgb(110,110,110,255), stop: 0.2
rgba(200, 200, 200,255), stop:1
rgb(255, 255, 255, 255));
color:black;
border-color:black;
}
Wirst du vermutlich mit
Code: Alles auswählen
... paintEvent(..)
{
if (palette().brush(QPalette::Background).gradient())
qDebug() << palette().brush(QPalette::Background).gradient()->stops();
}
hth..
-
Helmut Berg
- Beiträge: 6
- Registriert: 23. Februar 2010 10:03
- Wohnort: Darmstadt
Hallo solarix.
Was Du sagst, klappt, wenn ich den normalen QPushbutton Style setze. Aber an eine Brush die z.B. nur für den Pressed State gesetzt ist, komme ich so nicht drann, sie taucht nirgendwo in der Palette auf. (Habe mal alle Brushelemente der Palette durchitteriert)
Beispiel:
QString style = QString::fromUtf8(
"QPushButton{"
"background-color:qlineargradient("
"x1:0, y1:0, x2:0, y2:1,stop:0 "
"rgb(60,60,60), stop: 0.4 "
"rgb(130, 130, 130), stop:1 "
"rgb(130, 130, 130));"
"color: white;"
"}"
"QPushButton:pressed{"
"background-color:qlineargradient("
"x1:0, y1:0, x2:0, y2:1,stop:0 "
"rgb(110,110,110), stop: 0.2 "
"rgb(200, 200, 200), stop:1 "
"rgb(255, 255, 255));"
"color:black;"
"}" );
Die Backgroundbrush von QPushButton bekomme ich, die von QPushButton :pressed nicht.
Irgendeine Idee?
Viele Grüße,
Was Du sagst, klappt, wenn ich den normalen QPushbutton Style setze. Aber an eine Brush die z.B. nur für den Pressed State gesetzt ist, komme ich so nicht drann, sie taucht nirgendwo in der Palette auf. (Habe mal alle Brushelemente der Palette durchitteriert)
Beispiel:
QString style = QString::fromUtf8(
"QPushButton{"
"background-color:qlineargradient("
"x1:0, y1:0, x2:0, y2:1,stop:0 "
"rgb(60,60,60), stop: 0.4 "
"rgb(130, 130, 130), stop:1 "
"rgb(130, 130, 130));"
"color: white;"
"}"
"QPushButton:pressed{"
"background-color:qlineargradient("
"x1:0, y1:0, x2:0, y2:1,stop:0 "
"rgb(110,110,110), stop: 0.2 "
"rgb(200, 200, 200), stop:1 "
"rgb(255, 255, 255));"
"color:black;"
"}" );
Die Backgroundbrush von QPushButton bekomme ich, die von QPushButton :pressed nicht.
Irgendeine Idee?
Viele Grüße,
-
Helmut Berg
- Beiträge: 6
- Registriert: 23. Februar 2010 10:03
- Wohnort: Darmstadt
Hallo,
ich habe das jetzt etwas genauer analysiert, mit folgendem Ergebnis:
1) Wenn für ein QWidget ein StyleSheetStyle definiert wurde, wird die virtuelle Funktion drawControl der von QStyle abgeleiteten Klasse QStyleSheetStyle zum Zeichnen verwendet.
2) Diese Funktion ruft zuerst einmal QRenderRule auf, die alle definierten Styleinformationen (auch die in den Elternfenstern definierten Infos) zusammensammelt. Bei dieser Klasse werden dann zum gegebenen Zeitpunkt die entsprechenden Fonts, Brushes, etc. angefragt.
3) Leider sind sowohl QStyleSheetStyle als auch QRenderRule nicht für den Programierer zugänglich, und ich habe keine Möglichkeit gefunden, mich so dazwischenzuklemmen, dass ich nach Setzen der richtigen Palette selber zeichnen kann. Insofern muss ich den Versuch wohl aufgeben...
Wenn jemandem zu diesem Thema noch etwas einfällt, bitte posten...
Viele Grüße
ich habe das jetzt etwas genauer analysiert, mit folgendem Ergebnis:
1) Wenn für ein QWidget ein StyleSheetStyle definiert wurde, wird die virtuelle Funktion drawControl der von QStyle abgeleiteten Klasse QStyleSheetStyle zum Zeichnen verwendet.
2) Diese Funktion ruft zuerst einmal QRenderRule auf, die alle definierten Styleinformationen (auch die in den Elternfenstern definierten Infos) zusammensammelt. Bei dieser Klasse werden dann zum gegebenen Zeitpunkt die entsprechenden Fonts, Brushes, etc. angefragt.
3) Leider sind sowohl QStyleSheetStyle als auch QRenderRule nicht für den Programierer zugänglich, und ich habe keine Möglichkeit gefunden, mich so dazwischenzuklemmen, dass ich nach Setzen der richtigen Palette selber zeichnen kann. Insofern muss ich den Versuch wohl aufgeben...
Wenn jemandem zu diesem Thema noch etwas einfällt, bitte posten...
Viele Grüße