Seite 1 von 1

in QSqlQueryModel Spalte einfügen.

Verfasst: 11. Juli 2018 12:45
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

Re: in QSqlQueryModel Spalte einfügen.

Verfasst: 11. Juli 2018 18:30
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

Re: in QSqlQueryModel Spalte einfügen.

Verfasst: 25. August 2018 12:25
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

Re: in QSqlQueryModel Spalte einfügen.

Verfasst: 6. September 2018 12:22
von Chri
Kann niemand oder will niemand?

Re: in QSqlQueryModel Spalte einfügen.

Verfasst: 6. September 2018 18:01
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.

Re: in QSqlQueryModel Spalte einfügen.

Verfasst: 7. September 2018 09:58
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