Seite 1 von 1

QListView - TableModel - QPixmap in column 2 abhängig von 4

Verfasst: 17. Juni 2011 18:01
von helmuth
Ich hab ne kleine SqLite Datenbank mit ner einzelnen Tabelle. In Spalte 4 hab ich je zustand meiner Zeile entweder ne 0 oder ne 1 gespeichert.

Aus dieser Tabelle möchte ich jetzt Spalten 2 und 3 darstellen. Die Spalte 2 soll jetzt abhängig vom Inhalt der Spalte 4 eine entsprechende QPixmap bekommen. (2 zustände sind möglich)

Hier mal ein Auszug aus meinem bisherigen code:

Code: Alles auswählen

QVariant TableModel::data(const QModelIndex &index, int role) const
{
    QVariant value = QSqlTableModel::data(index, role);
    if (value.isValid() && role == Qt::DisplayRole)
    {
        if (index.column() == 2)
        {
            return value.toString();
        }

        if (index.column() == 3)
        {
            return value.toString();
        }
    }

    if (role == Qt::DecorationRole && index.column () == 2)
    {
        QPixmap m(QString( ":/general/images/locked.png" ));
        return qVariantFromValue(m);
    }
    return value;
}
Hab testweise noch alle 4 Spalten in meiner QListView eingeblendet.

Mein Problem ist jetzt, wenn jetzt meine Qt::DecorationRole Bedingung für die Spalte 2 aufgerufen wird ist value ja zum einen invalid, zum anderen müsste ich ja wissen wie der value der zugehörigen spalte 4 wäre und anhand diesem entscheiden welche Pixmap ich der Spalte 2 zuweise.

Irgendwie konnt mir bisher google auch nicht weiterhelfen. Hat jemand einen Tipp oder ist der Ansatz komplett falsch?

Verfasst: 20. Juni 2011 14:05
von helmuth
Okay, ich bin jetzt schonmal ein Schritt weiter... ich fürchte aber er führt nicht in die richtige Richtung:

Code: Alles auswählen

QVariant TableModel::data(const QModelIndex &index, int role) const 
{ 
    QVariant value = QSqlTableModel::data(index, role); 
    if (value.isValid() && role == Qt::DisplayRole) 
    { 
        if (index.column() == 2) 
        { 
            return value.toString(); 
        } 

        if (index.column() == 3) 
        { 
            return value.toString(); 
        } 
    } 

    if (role == Qt::DecorationRole && index.column () == 3) 
    { 
        if (index.data().toString() == "0")
        {
            QPixmap m(QString( ":/general/images/unlocked.png" ));
            return m;
        }
        if (index.data().toString() == "1")
        {
            QPixmap m(QString( ":/general/images/locked.png" ));
            return m;
        }
    } 
    return value; 
}
So bekomme ich das entsprechend richtige Icon zumindest in der Spalte 3 angezeigt. Abhängig vom Inhalt meiner Tabelle.
Ich könnt mit diesem Kompromiss leben. Allerdings kann ich den Text in der Spalte nicht entfernen. Ich habe also immer mein Icon gefolgt von einer 0 bzw. einer 1 in der Zelle.

Ist es möglich das in einer entsprechenden Column nur eine QPixmap angezeigt wird obwohl sie auch Text enthält?