2010-05-14 3 views
10

Wenn eine QComboBox Kontrolle in Qt Designer hinzufügen, bekomme ich eine schreckliche suchen, nicht-native Steuerung finden Sie unter:Wie kann ich ein Qt-Widget dazu bringen, Stylesheets zu ignorieren, die auf übergeordneten Widgets gesetzt sind?

http://curiouschap.com/wp-content/uploads/2010/05/stack_qcombobox_question.png [als Neuling, also würde ich das Bild nicht zulassen einfügen]

On Wenn Sie genauer hinschauen, stellt sich heraus, dass zwei der übergeordneten Steuerelemente, QParentWindow und QStackedWidget, Stylesheets enthalten, die QComboBox erbt. Wenn ich die benutzerdefinierten Stile lösche, dann bekomme ich eine native QComboBox wie die auf der linken Seite.

Wie kann ich QComboBox (und Widgets im Allgemeinen) nicht übergeordnete Stile erben? Oder, wie kann ich einen Stil für zB QParentWindow erstellen, und zwar so, dass es nur lokal ist und nicht kaskadiert?

Antwort

5

Ich glaube nicht, dass Sie verhindern können, dass es kaskadiert. Aber indem Sie in Ihrem Stylesheet spezifischeres selectors verwenden, könnten Sie vielleicht Eigenschaften nur für Ihre QParentWindow Klasse oder spezifisches Objekt definieren.

+0

Einverstanden. Anstatt Generics in Ihrem Stylesheet zu verwenden, sollten Sie sie nur für die QWidgets festlegen, die Sie formatieren möchten. –

+5

Danke, das war sehr hilfreich. Es scheint, dass die Verwendung der folgenden spezifischen Selektorsyntax QWidget # mein_Container_Name * tatsächlich den Stil lokal für das QWidget behält, dessen Name mein_Container_Name ist und verhindert, dass es kaskadiert. –

2

benötigen Sie einen Stil zu definieren und dann auf das Objekt zuweisen:

QString settingStyle = " QGroupBox#groupBoxSettings {\ 
     background-color: rgb(248,248,248);\ 
     border: 1px solid rgb(170, 170, 255);\ 
     border-radius: 3px;\ 
     border-color:rgb(170, 170, 255);\ 
}"; 


ui->groupBoxSettings->setStyleSheet(settingStyle); 

hier „groupBoxSettings“ ist der Name des Objekts. Auf diese Weise haben sie innerhalb der Groupbox ihren eigenen Stil.

+1

Vielen Dank für ein Beispiel. Man kann sogar die 'QGroupBox' verlassen, solange die Objektnamen (gesetzt durch' setObjectName') eindeutig sind. Vor allem, wenn "QWidget # ..." stehen würde, wäre das ziemlich nutzlos, weil das meiste/jedes Widget von "QWidget" abgeleitet ist. – Trilarion

Verwandte Themen