Seite 1 von 1

[gelöst] Tableview/SqlRelationalTableModel Hintergrundfarbe

Verfasst: 18. November 2014 22:33
von Fenriswolf
N Abend liebes Forum,
ich komme mal wieder nicht weiter :(
Wie der Titel schon sagt, möchte ich in meinem TableView/SqlRelationalTableModel die Hintergrundfarbe ändern.
Wie das mit einer vordefinierten Zelle möglich ist, hab ich bereits herausgefunden:

Code: Alles auswählen

QVariant MySqlRelationModel::data(const QModelIndex &index, int role) const
{
    int row = index.row();
    int col = index.column();

    if(role == Qt::BackgroundRole)
    {
        if (row == 1 && col == 2)  //change background only for cell(1,2)
        {
            QBrush Background(color);
            return Background;
        }
    }
    return QSqlRelationalTableModel::data(index, role);
}
doch wie kann ich das unter bestimmten Bedingungen machen? (z.b. in der Zelle steht "Arbeit")
SqlRelationalTableModel.setData funktioniert leider nicht (oder ich hab mich zu doof angestellt): :oops:

Code: Alles auswählen

model->setData(model->index(1,3),QBrush(Qt::red), Qt::BackgroundRole);
kann mir jemand nen Hinweis geben? Leider Stoße ich bei der Suche immer nur auf die gleichen Lösungen :cry:

Bin wie immer für jede konstruktive Hilfe dankbar :)

Re: Tableview/SqlRelationalTableModel Hintergrundfarbe

Verfasst: 19. November 2014 08:24
von MichaelS
doch wie kann ich das unter bestimmten Bedingungen machen? (z.b. in der Zelle steht "Arbeit")
Der data() Methode von QModelIndex kannst Du die gewünschte Rolle übergeben. Damit kannst Du Dir den Inhalt der Zelle holen und diesen prüfen.

Code: Alles auswählen

    int row = index.row();
    int col = index.column();

    if(role == Qt::BackgroundRole)
    {
         QString inhalt = index.data( Qt::DisplayRole ).toString(); 
       
         if ( inhalt == "Arbeit" )  //change background if cell contains 'Arbeit'
        {
            QBrush Background(color);
            return Background;
        }
    }
    return QSqlRelationalTableModel::data(index, role);

Re: Tableview/SqlRelationalTableModel Hintergrundfarbe

Verfasst: 19. November 2014 12:24
von Fenriswolf
Hallo Michel,
So einfach ist das?!
Hätte gedacht, das ist komplizierter.

Dann muss ich aber noch eine Frage fragen :D
Über das model kann ich den Zellinhalt abfragen.
Wie kann ich eine komplette Spalte aufgrund von Infos im Header einfärben? Diese Info wird ja nicht mitgeliefert.
Wenn ich jetzt raten müsste, muss ich ebenso für das TableView vorgehen. Also neue Klasse erstellen, alte vererben, Infos abfangen und anpassen.

Bin derzeit nicht daheim, werd das nachher nochmal probieren

Re: Tableview/SqlRelationalTableModel Hintergrundfarbe

Verfasst: 19. November 2014 15:51
von MichaelS
Wie kann ich eine komplette Spalte aufgrund von Infos im Header einfärben? Diese Info wird ja nicht mitgeliefert.
Wenn mit 'Infos im Header' die Spaltenüberschriften gemeint sind - auf deren Inhalt kannst Du mit der Methode headerData zugreifen:

Code: Alles auswählen

 
     if( role == Qt::BackgroundRole )
    {
         QString inhalt = headerData( index.column(), Qt::Horizontal, Qt::DisplayRole ).toString(); 
       
         if ( inhalt == "Arbeit" )  //change background if cell header contains 'Arbeit'
        {
            QBrush Background(color);
            return Background;
        }
    } 

Re: Tableview/SqlRelationalTableModel Hintergrundfarbe

Verfasst: 19. November 2014 16:48
von Fenriswolf
:shock: oh man, das ist ja fast schon zu einfach :D
warum findet man dann im Netz immer nur so schwierige Antworten?

Danke dir, hast mir sehr geholfen

Re: Tableview/SqlRelationalTableModel Hintergrundfarbe

Verfasst: 19. November 2014 22:20
von MichaelS
Fenriswolf hat geschrieben:warum findet man dann im Netz immer nur so schwierige Antworten?
Es führen eben viele Wege nach Rom :-)
Fenriswolf hat geschrieben:Danke dir, hast mir sehr geholfen
Freut mich, dass ich helfen konnte.