in QSqlQueryModel Spalte einfügen.

Alles rund um die Programmierung mit Qt
Antworten
Chri
Beiträge: 100
Registriert: 23. Juni 2017 12:32

in QSqlQueryModel Spalte einfügen.

Beitrag von Chri »

Hi
Habe eine funktionierende Abfrage aus einer Datenbank

Code: Alles auswählen

QSqlQueryModel * qmod = new QSqlQueryModel();
qmod->setQuery( ....
ui->treeView_BTsch->setModel(qmod);
Nun möchte ich, dass in einer zusätzlichen Spalte weitere Werte angezeigt werden (sagn wir mal: die Zahl 22), die eingefügte Spalte soll nichts mit der Datenbank zu tun haben:

Code: Alles auswählen

qmod->insertColumn(5);  //Es wird tasächlich eine Spalte eingefügt
for (int i = 0; i<qmod->rowCount(); i++)
{
    qmod->setData(qmod->index(i,6),22);  //Das funktioniert nicht, die Spalte bleibt leer.
    qDebug()<<qmod->data(qmod->index(i,6)).toDouble();  // liefert 0
}
Wie kann ich Daten in die eingefügte Spalte schreiben bzw. geht das überhaupt?


LG
Chri
Die Sprache des Technikers ist die Skizze
hilefoks
Beiträge: 144
Registriert: 13. März 2008 16:09

Re: in QSqlQueryModel Spalte einfügen.

Beitrag von hilefoks »

QSqlQueryModel ist ein read-only Model - insertColumn ist für QSqlQueryModel entsprechend nicht implementiert und gibt immer false zurück. Die Methode ist für abgeleitete Klassen gedacht, die diese Funktionalität dann ggf. implementieren. Abgesehen davon ist sie auch dafür gedacht diese Spalte wirklich der Datenbank hinzuzufügen.

Was du suchst ist eine Proxy-Model (QAbstractProxyModel oder QSortFilterProxyModel).

MfG
Hilefoks
Chri
Beiträge: 100
Registriert: 23. Juni 2017 12:32

Re: in QSqlQueryModel Spalte einfügen.

Beitrag von Chri »

Hi
Habe nun ein QSortFilterProxyModel und auch eine Spalte eingefügt:

Code: Alles auswählen

 QSortFilterProxyModel *proxyModel = new QSortFilterProxyModel(this);
 proxyModel->setSourceModel(qmod);
 ui->treeView_BTsch->setModel(proxyModel);
 proxyModel->insertColumn(5);  
Was mir jedoch nicht gelingt, in die eingefügte Spalte Werte zu schreiben.
Mein aktueller Versuch (nach vielen anderen):

Code: Alles auswählen

  //Schleife über die Zeilen:
     QModelIndex spa  = proxyModel-> QSortFilterProxyModel::index(i,5);
proxyModel->setData(spa,L);
Was stimmt nicht?

LG
Chri
Die Sprache des Technikers ist die Skizze
Chri
Beiträge: 100
Registriert: 23. Juni 2017 12:32

Re: in QSqlQueryModel Spalte einfügen.

Beitrag von Chri »

Kann niemand oder will niemand?
Die Sprache des Technikers ist die Skizze
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: in QSqlQueryModel Spalte einfügen.

Beitrag von Christian81 »

Ich benutze die Sql-Models nicht, maximal zum einfachen anschauen. Für alles andere benutze ich eigene Models - da weiß ich dass alles so funktioniert wie ich es möchte. Die Sql-Models sind auch eigentlich nur Convenience-Models, also nichts für größere Aufgaben.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Chri
Beiträge: 100
Registriert: 23. Juni 2017 12:32

Re: in QSqlQueryModel Spalte einfügen.

Beitrag von Chri »

Ok
Aber wie ist nun das Problem zu lösen:
Ich habe eine Datenbank, um die Daten "rüber" zu bekommen brauch ich irgendein? Model. Eines das editieren erlaubt.
Für Filtern/Sortieren wird überall ein proxymodel empfohlen:
Es wird auch gesagt, dass ich z.B. virtuelle Spalten einfügen kann.
Wie das genau geht, hab ich jedoch nirgends gefunden. (Das Einfügen ist nicht das Problem, sondern das Schreiben in die virtuelle Spalte)
Ich habe nun also dieses Problem zu lösen, aber außer der Info, dass es prinzipiell geht, steh ich noch immer ratlos da:
Wie kann ich in die virtuelle Spalte schreiben? (Ganz simpel, ohne programiertechnische Raffinessen, wenn möglich ohne subclass)
Vor der pragmatischen Lösung - nämlich verschiedene views so zusammenzubasteln, dass es wie eine Tabelle ausschaut - schrecke ich noch zurück:
Es muss doch eleganter und einfacher gehen.

LG
Chri
Die Sprache des Technikers ist die Skizze
Antworten