[gelöst] Icon in QTableView abhängig vom Wert in Model

Alles rund um die Programmierung mit Qt
Antworten
rogorido
Beiträge: 6
Registriert: 21. August 2012 08:35

[gelöst] Icon in QTableView abhängig vom Wert in Model

Beitrag von rogorido »

Hi,

ich habe ein folgendes Problem:
1. ich habe ein QTableView das an ein MyModel (abgeleitet von QSqlTableModel) gebunden ist;
2. ich versuche damit 4 Informationen anzuzeigen, die aus einer Datenbank kommen: Kürzel, Titel, Untertitel, Gelesen
3. Das Feld 'Gelesen' ist boolean (eigentlich tynint(4) in mysql).

Was ich aber tun will ist folgendes: je nach dem Wert von 'Gelesen' möchte ich, dass in der ersten Spalte (Kürzel) das entsprechende Icon angezeigt wird.

Ich bin mit Qt nicht sehr bewandert, aber ich tue folgendes: ich leite MyModel von QSqlTableModel ab und überschreibe data. Wenn ich folgendes habe:

Code: Alles auswählen

QVariant MyTableModel::data(const QModelIndex &index, int role) const
{
    if (!index.isValid())
             return QVariant();

    QVariant value = QSqlTableModel::data(index, role);

    QIcon icon_yes = QIcon(":/icons/icons/Restart.png");
    QIcon icon_no = QIcon(":/icons/icons/Close.png");

    if (role == Qt::DecorationRole && index.column()==0){
                return icon_yes;
        }

        return value;
}
Erscheint, wie erwartet, ein Icon in der ersten Spalte. Aber natürlich immer das gleiche.

Die Frage ist also: wie kann ich da auf den Wert der Spalte 'Gelesen' zugreifen und Qt sagen: 'je nach dem Wert, setze das entsprechende Icon!'

danke im voraus

PS: ich möchte ein ItemDelegate vermeiden, weil ich die Daten nicht editieren will.
Zuletzt geändert von rogorido am 27. August 2012 00:03, insgesamt 1-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Icon in QTableView abhängig vom Wert in Model

Beitrag von Christian81 »

Dann hol doch den Wert von deiner 4. Spalte per data() und gib je nachdem yes oder no zurück.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
rogorido
Beiträge: 6
Registriert: 21. August 2012 08:35

Re: Icon in QTableView abhängig vom Wert in Model

Beitrag von rogorido »

Christian81 hat geschrieben:Dann hol doch den Wert von deiner 4. Spalte per data() und gib je nachdem yes oder no zurück.
Danke für die Antowrt. Aber gerade da stecke ich: ich komme nicht darauf, wie man auf diesen verdammten Wert zugreift. Irgendein kleiner Hinweis?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Icon in QTableView abhängig vom Wert in Model

Beitrag von Christian81 »

Du reimplementierst doch genau die data() - Methoden welche die Daten zurückliefert - was hindert dich daran diese Funktion mit der Spalte 4 aufzurufen?
Wie man an den ModelIndex kommt steht hier: http://qt-project.org/doc/qt-4.8/model- ... el-classes
Und wie man ein QVariant in ein int/bool wandelt hier: http://qt-project.org/doc/qt-4.8/qvariant.html#details
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
rogorido
Beiträge: 6
Registriert: 21. August 2012 08:35

Re: Icon in QTableView abhängig vom Wert in Model

Beitrag von rogorido »

danke nochmals für deine Anwort.
Christian81 hat geschrieben:was hindert dich daran diese Funktion mit der Spalte 4 aufzurufen?
Nichts, nur meine Unerfahrenheit. Es ist mein erstes Projekt mit Qt und sogar mit C++.

Aber, gut, ich habe es geschafft. Ich bin mir nicht ganz sicher, ob das eine saubere Lösung ist, aber zumindest funtioniert sie. Ich habe jetzt:

Code: Alles auswählen

if (role == Qt::DecorationRole && index.column()==0){
        QModelIndex i= index.model()->index(index.row(), 3);
        QVariant wert= QSqlTableModel::data(i, Qt::DisplayRole);
        bool gelesen = wert.toBool();
        if (gelesen)
                return icon_yes;
        else
                return icon_no;
        }

        return value;
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: [gelöst] Icon in QTableView abhängig vom Wert in Model

Beitrag von Christian81 »

Sieht alles ok aus. Nur "index.model()->index" ist überflüssig - da reicht ein "index" - du bist ja schliesslich das Model.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
rogorido
Beiträge: 6
Registriert: 21. August 2012 08:35

Re: [gelöst] Icon in QTableView abhängig vom Wert in Model

Beitrag von rogorido »

danke nochmals.

Aber: wenn ich nur folgendes schreibe:
QModelIndex i= index(index.row(), 4);
bekomme ich eine Fehlermeldung...

Code: Alles auswählen

mytablemodel.cpp: In member function 'virtual QVariant MyTableModel::data(const QModelIndex&, int) const':
mytablemodel.cpp:39:45: error: no match for call to '(const QModelIndex) (int, int)'
make: *** [mytablemodel.o] Error 1
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: [gelöst] Icon in QTableView abhängig vom Wert in Model

Beitrag von Christian81 »

Ja, weil index in deinem Fall auch gleichzeitig ein Variablenname ist. this->index() sollte helfen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
rogorido
Beiträge: 6
Registriert: 21. August 2012 08:35

Re: [gelöst] Icon in QTableView abhängig vom Wert in Model

Beitrag von rogorido »

Christian81 hat geschrieben:Ja, weil index in deinem Fall auch gleichzeitig ein Variablenname ist. this->index() sollte helfen.
Recht hast du. Tausend Dank!
Antworten