Seite 1 von 1

Wert in TableView ändern

Verfasst: 8. Oktober 2009 08:40
von toem
Moin,
ich wühl mich shcon den ganzen Morgen durch die QT-Doku, aber entweder überlese ich etwas oder mein Englisch ist zu schlecht.

Ich habe ein TableView das ich wie folgt befülle:

Code: Alles auswählen

mod = new QSqlTableModel();
mod->setTable("arbeitszeit");
mod->setSort(0, Qt::DescendingOrder);
mod->select();
m_ui->tableView->setModel(mod);
Nun möchte ich, wenn z.B. die Anwesenheit kleiner 8 Std. ist ein Feld rot einfärben. Aber ich finde keinen funktionierenden Ansatz auf eine Zeile und Spalte zuzugreifen und diese zu ändern.

Könnte mir bitte jemand einen Tip oder ein Stichwort geben?

Verfasst: 8. Oktober 2009 09:17
von AuE
Hi,

da musst du die data() Methode überschreiben!
Such mal hier im Forum!


***** EDIT ich seh grad du nutzt ein Model ;-)
Evtl ist da setData das richtige?!

Ich hab das immer über QSqlQueryModel gemacht. Da gibts die

virtual QVariant data ( const QModelIndex & item, int role = Qt::DisplayRole ) const

Verfasst: 8. Oktober 2009 09:20
von toem
Etwas genauer hast Du es nicht?

1552 Ergebnisse durchsuchen dauert schon was.

Verfasst: 8. Oktober 2009 09:25
von AuE

Verfasst: 8. Oktober 2009 10:18
von toem
Danke, das hatte ich inzwischen auch gefunden.

Ich habe das Beispiel leicht verändert eingebunden:

Code: Alles auswählen

QVariant MyCustomSqlModel::data(const QModelIndex &index, int role) const
{
    QVariant value = QSqlQueryModel::data(index, role);

    if (index.column() !=7)
        return value;

    QModelIndex KeyIndex = QSqlQueryModel::index(index.row(), 0);
    QString wert = data(KeyIndex).toString();

    if (index.data().toString().indexOf("-") == 0)
    {
        return QColor(255,113,113);
    }
    else
    {
        return QColor(255,255,255);
    }

    return value;
}
Allerdings bricht das Programm immer dann ab, wenn die gewünschte Spalte erscheint.

Rückgabewert -1073741819

Ich komm nicht so richtig weiter!

Verfasst: 8. Oktober 2009 11:04
von toem
Hat sich erledigt, thx

SqlQueryModel - zusätzliche Spalte mit berechneten Werten

Verfasst: 26. November 2009 18:47
von bartenstein
Hallo!

Dieser Thread war schon sehr hilfreich und half mir eine funktionierende Lösung zu implementieren. Danke dafür!

Mit einem QSqlQueryModel-Objekt hole ich Artikel aus einer Datenbank. Ein zusätzliches berechnetes Feld soll den Inventarwert (nach FIFO-Prinzip) anzeigen. Hierfür ist neben Datenbankzugriffen (QSqlQuery) auch eine Berechnung notwendig.
Wie im Thread beschrieben, habe ich eine Klasse von QSqlQueryModel abgeleitet und die Methode data überschrieben. In dieser Methode wird das zusätzliche Feld berechnet.

Wie ich sehe, wird die Methode data sehr oft aufgerufen. Beim Scrollen in der TableView etc. Gibt es keine andere ressourcenschonendere Möglichkeit? (setData, ...)

Vielen Dank für eure Ideen im Voraus!
Dominik

Verfasst: 26. November 2009 18:57
von upsala
Du könntest doch deine Berechnung cachen.

Cache

Verfasst: 26. November 2009 23:26
von bartenstein
@upsala: Danke für den Tipp! Ich habe die Methode queryChange meiner von QSqlQueryModel abgeleiteten Klasse überschrieben. In dieser Methode invalidiere ich das Cachedictionary (self.dict = {}) und in der data-Methode befülle ich das Cachedictionary. Funktioniert einwandfrei! Danke!

Lg,
Dominik