2017-01-13 7 views
0

Ich erstellte ein Listenansichtsmodell, indem ich von QAbstractListModel erbte. Ich implementierte data(const QModelIndex &, int), um die Hintergrundfarbe des Listenelements (unter Qt::BackgroundRole) und die Textfarbe des Elements (unter Qt::ForegroundRole) bereitzustellen.QAbstractListModel und Qt Stylesheets

Es funktioniert, wenn ich meine Anwendung ohne ein Stylesheet ausführen, aber sobald ich ein Stylesheet anwenden (mit QApplication::setStyleSheet), wird die Textfarbe falsch angezeigt. Die Textfarbe bleibt die im Stylesheet eingestellte Farbe.

Ich debuggte durch das Modell und obwohl es zurückgibt, zum Beispiel QBrush(QColor(255, 0, 0)), auf der ForegroundRole gilt es nie für die Listenansicht.

Gibt es etwas, das ich extra tun muss, damit mein Listenansichtsmodell ordnungsgemäß funktioniert, wenn ein Stylesheet für die Anwendung festgelegt wird?

Richtige Antwort (von Antwort von king_nak) [https://stackoverflow.com/a/41673494/1151329]:

Ich habe folgend im Stylesheet (.qss-Datei) nach dem ursprünglichen QListView Block

QListView[default_style="true"] 
{ 
    color : default; 
} 

In meinem Code Ich rief dann

ui.listView->setProperty("default_style", QVariant(true)); 

Es funktioniert gut mit jedem anderen QListView gestylt wird durch das Stylesheet, aber dieses mit der Eigenschaft 'default_style' verwendet die vom Widget festgelegte Palette.

+0

Setzen Sie Farben explizit für das Listenwidget in Ihrem Stylesheet? Dies würde natürlich die Hinweise des Modells überschreiben. –

+0

Das Stylesheet hat Eigenschaften für Listenansicht und Listen-Widget, aber ich habe auch andere Listen in der App, die diesen Stil verwenden sollten. Ich suche nach einer Möglichkeit, ein Listenmodell zu erstellen, das den festgelegten Stil überschreiben kann - was ich erwartet habe. –

Antwort

1

Sie möchten die Textfarbe des Stylesheets für Ihr spezifisches Listen-Widget zurücksetzen. Um dies zu tun, erweitern Sie Ihr Stylesheet in einem separaten Selektor für dieses Widget auf den Benutzer default.

Z. B .:

QListView { 
    /* Style common to all list views */ 
} 

QListView#MySpecialList { 
    color: default; 
    /* Other adjustments */ 
} 

In diesem Fall muss der Objektname der Liste Ansicht MySpecialList sein. Optional können Sie auch eine dynamische Eigenschaft hinzufügen und im Stylesheet dafür testen:

+0

Danke, das hat funktioniert –

Verwandte Themen