in QSqlQueryModel Spalte einfügen.

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

in QSqlQueryModel Spalte einfügen.

Beitrag von Chri » 11. Juli 2018 12:45

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: 137
Registriert: 13. März 2008 17:09

Re: in QSqlQueryModel Spalte einfügen.

Beitrag von hilefoks » 11. Juli 2018 18:30

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: 91
Registriert: 23. Juni 2017 12:32

Re: in QSqlQueryModel Spalte einfügen.

Beitrag von Chri » 25. August 2018 12:25

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: 91
Registriert: 23. Juni 2017 12:32

Re: in QSqlQueryModel Spalte einfügen.

Beitrag von Chri » 6. September 2018 12:22

Kann niemand oder will niemand?
Die Sprache des Technikers ist die Skizze

Christian81
Beiträge: 7267
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: in QSqlQueryModel Spalte einfügen.

Beitrag von Christian81 » 6. September 2018 18:01

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: 91
Registriert: 23. Juni 2017 12:32

Re: in QSqlQueryModel Spalte einfügen.

Beitrag von Chri » 7. September 2018 09:58

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