Seite 1 von 1

StylSheet Elemente

Verfasst: 20. Oktober 2009 12:33
von ZSchneidi
Hi, ich hoffe das Thema is noch nicht in Grund und Boden geredet worden,
ich hab zwar schon viel zu dem Thema hier gefunden, aber eben noch nicht die Lösung gefunden.

Ich bin gerade dabei mein Layout umzu"stylen".

Dabei hab ich ein paar Probleme, die richtigen Elemente zu adressieren.

Ein Beispiel:

Die QToolbox
Da hab ich bisher die

QToolBox::tab {
...
}
QToolBox{
...
}

adressieren können, die Tabs sind klar, die QToolBox selbst bedient die Grundfläche des Widgets.

Was ich jetzt noch brauche sind die eigentlichen Items der QToolBox, sprich die Flächen die geöffnet werden, wenn ich auf einen Tab klicke.

Wie kann ich jetzt rausfinden, welche Elemente ich an den einzelnen Widgets für das StyleSheet zur verfügung habe ?
Da hab ich bisher noch nichts zu gefunden.

Verfasst: 20. Oktober 2009 14:25
von archer
Du könntest alle Items durchlaufen und ihnen ein Stylesheet zuweiden.
z.B.

Code: Alles auswählen

for (int i = 0; i < myToolBox->count(); i++)
    myToolBox->widget(i)->setStyleSheet("....");

Verfasst: 20. Oktober 2009 14:52
von ZSchneidi
Ok, wäre wohl eine möglichkeit.

Ich arbeite aber mit dem Designer, dementsprechend machen ich das
komplette Layout nicht im Quellcode.

Ich müsste es also direkt adressiert kriegen.

Ich hab auch schon überall gesucht um einfach mal eine auflistung aller elemente der einzelnen Widgets zu kriegen.

Verfasst: 20. Oktober 2009 15:23
von archer
Auch schon mal

Code: Alles auswählen

QToolBox QWidget{
...
}
oder

Code: Alles auswählen

QToolBox > QWidget {
...
}
probiert?

Verfasst: 20. Oktober 2009 15:39
von RHBaum
Ich hab auch schon überall gesucht um einfach mal eine auflistung aller elemente der einzelnen Widgets zu kriegen.
QWidgets sind auch QObjects
und alle widgets sind sicher in der Objecthirarchie, wenn du mit dem Designer arbeitest.
QList<T> QObject::findChildren ( const QString & name = QString() ) const
mit leerstring als paramter, liefert dir alle subobjecte, rekursiv !

nun noch mit einem qobject_cast testen ob es sich um nen widget handelt ...

Nicht besonders performant, aber schnell implementiert.

Besser:
deine widgets haben doch alle nen layout ??? sonst macht der designer ja weniger sinn ^^
also dir vom toplevel widget das layout geben lassen,
mit
int QLayout::count () const
und
QLayoutItem * QLayout::itemAt ( int index ) const
alle LayoutItems durchlaufen ...
QWidget * QLayoutItem::widget () testet gleich ob das ding nen widget ist ... und castet es dir entsprechend.
Wenn es nen widget ist, wieder von vorn anfangen (Rekursion) ....

Ciao ...

Verfasst: 20. Oktober 2009 15:41
von ZSchneidi
Ok, das war schon garnicht so verkehrt, jetzt konnte ich zumindest den Stil des eigentlichen Körpers anpassen, der Stil wird dann zwar gleich auf alle Inhalte angewand, aber nur solange ich keine spezifischen Stile für die ChildWidgets definiere, das sollte mich zumindest erstmal weiter bringen.

Das hilft mir nur noch nicht wirklich beim verständnis der Thematik.

Dank dir auf jeden Fall erstmal, fall noch Jemand weiß, wo ich mich etwas schlauer machen kann, was diese Beziehungen angeht, wäre das schon sehr hilfreich.

Verfasst: 28. Oktober 2009 19:11
von Troll.Soft
Hallo,
mit dem Designer kannst Du Objecten Namen geben.
Mit QList<T> findChildren ( const QString & name = QString() ) const
kannst Du Dir Objecte suchen.

void dumpObjectInfo () und
void dumpObjectTree ()

geben mal einen guten Überblick.

tschüß
Troll.Soft

Verfasst: 29. Oktober 2009 12:28
von ZSchneidi
Netter kniff, könnt sicherlich noch hilfreich sein, aber ein klein wenig umständlich isses schon. Nicht dass ich zu faul wäre ^^

http://doc.trolltech.com/4.4/stylesheet-reference.html

Die StyleSheet referenz hat mir hier jetz aber auch schon gut weiter geholfen. Mann muss sich zwar seine optionen zusammensuchen, aber damit hab ich bisher schon alles gefunden, was ich gesucht hab.