Wert in TableView ändern

Alles rund um die Programmierung mit Qt
Antworten
toem
Beiträge: 124
Registriert: 17. März 2009 14:01

Wert in TableView ändern

Beitrag 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?
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag 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
Zuletzt geändert von AuE am 8. Oktober 2009 09:23, insgesamt 1-mal geändert.
toem
Beiträge: 124
Registriert: 17. März 2009 14:01

Beitrag von toem »

Etwas genauer hast Du es nicht?

1552 Ergebnisse durchsuchen dauert schon was.
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

toem
Beiträge: 124
Registriert: 17. März 2009 14:01

Beitrag 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!
toem
Beiträge: 124
Registriert: 17. März 2009 14:01

Beitrag von toem »

Hat sich erledigt, thx
bartenstein
Beiträge: 3
Registriert: 27. Oktober 2009 16:07
Wohnort: Österreich

SqlQueryModel - zusätzliche Spalte mit berechneten Werten

Beitrag 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
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Du könntest doch deine Berechnung cachen.
bartenstein
Beiträge: 3
Registriert: 27. Oktober 2009 16:07
Wohnort: Österreich

Cache

Beitrag 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
Antworten