Hallo allerseits,
hab schon wieder ein ziemlich bescheidenes Problem. Auch wenn manche evtl. müde lächeln mögen... aber auf Basis der Qt-Doku und auch per Suche mit Google und so komme ich net weiter...
Ich stelle ein von QAbstractItemModel abgeleitetes Model in einem QTreeView dar.
Nun möchte ich in Spalte 3 den Wert der Zelle auswerten - und entsprechend die Hintergrundfarbe ändern...
1. Versuch:
In der data() Methode des Models auf Qt::BackgroundRole entsprechend reagiert. Und dann entsprechend QColor(farbwert) zurückgeben...
2. Versuch:
Eigenes Delegate erstellt und entsprechend painter->fillRect(option.rect,QColor(farbwert)) gesetzt und alles wie in der Doku beschrieben zurückgegeben...
Nichts davon funktioniert... nach frustierendem Suchen habe ich nun herausgefunden, dass mein Stylesheet die Farben einfach überschreibt...
Problem ist bloss dass ich einen Stylesheet für meine Applikation benötige - und dort werden halt auch die Items des QTreeView mit einer Hintergrundfarbe belegt... Schalte ich diesen aus - geht alles.
Nun hätte ich jedoch zumindest vom Delegate erwartet, dass dieser den Stylesheet für die jeweilige Darstellung überschreibt...
Wie kann ich mein Problem trotzdem lösen?
danke für die Hilfe im Voraus
mfg
Tribari
QTreeView + Stylesheet = kann Zellhintergrund nicht färben
wuerd ich ja fast wetten drauf, das er das nicht tut ^^Nichts davon funktioniert... nach frustierendem Suchen habe ich nun herausgefunden, dass mein Stylesheet die Farben einfach überschreibt...
Da iss sicher was anderes faul ....
Spalte 3 zeigt die richtigen werte an ?Nun möchte ich in Spalte 3 den Wert der Zelle auswerten
Ich nehm an Du verwendest QT 4.x ...In der data() Methode des Models auf Qt::BackgroundRole entsprechend reagiert. Und dann entsprechend QColor(farbwert) zurückgeben...
Zu Deutsch, statt einem QVariant das ein QColor enthaelt, will er ein QVariant, das einen QBrush enthaeltQt::BackgroundRole 8 The background brush used for items rendered with the default delegate. (QBrush)
Nen Brush wiederum ist ne Kombi aus Muster + Farbe
Kannst also den Brush direkt aus dem QColor erzeugen ...QBrush ( const QColor & color, Qt::BrushStyle style = Qt::SolidPattern )
Ciao ...
hallo rhbaum,
danke für die schnelle antwort...
also die werte in spalte 3 werden richtig angezeigt - sind integer werte welche ich auch direkt aus dem entsprechendem Item auslese... also nicht von der view.
per switch-case entscheide ich welche farbe dargestellt werden soll... in die case verzweigungen geht er auch wunderbar rein...
Die Variante mit QBrush habe ich auch schon getestet - selbes ergebnis - nur die Farben des style sheets...
Verwende Qt 4.6.3 - und laut doku bin ich auch der meinung das dies funktionieren müsste...
Oder habe ich da irgendwo nen Denkfehler? Also im Internet hab keine Lösung für dieses Problem gefunden - sondern nur Beiträge die ein ähnliches Problem festgestellt haben... aber leider ohne Lösung 
Aber da ich mir auch net vorstellen kann, dass es am stylesheet liegt, wollte ich mal nachfragen
lg
tribari
danke für die schnelle antwort...
also die werte in spalte 3 werden richtig angezeigt - sind integer werte welche ich auch direkt aus dem entsprechendem Item auslese... also nicht von der view.
per switch-case entscheide ich welche farbe dargestellt werden soll... in die case verzweigungen geht er auch wunderbar rein...
Die Variante mit QBrush habe ich auch schon getestet - selbes ergebnis - nur die Farben des style sheets...
Verwende Qt 4.6.3 - und laut doku bin ich auch der meinung das dies funktionieren müsste...
Code: Alles auswählen
QVariant TreeModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid())
return QVariant();
if (role != Qt::DisplayRole && role != Qt::BackgroundRole)
return QVariant();
TreeItem *item = getItem(index);
if(item){
if(index.column()==3 && role==Qt::BackgroundRole)
{
switch(item->getState())
{
case 1: return QBrush(QColor(255,250,150));
......
}
}
}
}
Aber da ich mir auch net vorstellen kann, dass es am stylesheet liegt, wollte ich mal nachfragen
lg
tribari
ja da hast du recht - das war aber schon richtig... offiziell halt spalte 4 (hatte mich verschrieben weil ich immer in indexen denke). xD
hab jetzt aber des Rätsels Lösung gefunden - verdammt simpel - verdammt peinlich... aber was solls.
Also wenn jemand nochmal so ein Problem hat, hier die Lösung:
Delegate verwenden, und beim Delegate anlegen als parent einfach Null übergeben, anstatt eines QWidgets...
hätte ich mal früher dran denken können, dass der stylesheet ja auch vererbt wird...
trotzdem hätte ich gedacht, dass es spätestens beim Delegate die Darstellung des Stylesheets überschreibt.
what shalls...
Danke für die Hilfe
lg
tribari
hab jetzt aber des Rätsels Lösung gefunden - verdammt simpel - verdammt peinlich... aber was solls.
Also wenn jemand nochmal so ein Problem hat, hier die Lösung:
Delegate verwenden, und beim Delegate anlegen als parent einfach Null übergeben, anstatt eines QWidgets...
hätte ich mal früher dran denken können, dass der stylesheet ja auch vererbt wird...
trotzdem hätte ich gedacht, dass es spätestens beim Delegate die Darstellung des Stylesheets überschreibt.
what shalls...
Danke für die Hilfe
lg
tribari
Möchtest du die hintergrundfarbe des tabellen editors ändern oder der zelle?
Das sind zwei verschiedene paar, wird leider aus deinem Posting nicht deutlich.
Für ersteres brauchst du eine delegate. Denk drann das delegate selbst zu zerstören wenn du, aus welchen grund auch immer, kein parent übergibst.
Das sind zwei verschiedene paar, wird leider aus deinem Posting nicht deutlich.
Für ersteres brauchst du eine delegate. Denk drann das delegate selbst zu zerstören wenn du, aus welchen grund auch immer, kein parent übergibst.
ich wollte die hintergrundfarbe einer bestimmten zelle entsprechend ändern...
habe nun für das delegate auch das parent wieder mit übergeben... aber der stylesheet überschreibt die farben trotzdem.
also hab ich für QTreeView::item halt keine Background-Color gesetzt... sondern diese lege ich im delegate fest... nun gehts.
trotzdem komisch
habe nun für das delegate auch das parent wieder mit übergeben... aber der stylesheet überschreibt die farben trotzdem.
also hab ich für QTreeView::item halt keine Background-Color gesetzt... sondern diese lege ich im delegate fest... nun gehts.
trotzdem komisch