Seite 1 von 1

QSqlTableModel - QTableView

Verfasst: 7. Dezember 2012 13:23
von JohnR
Ich arbeite gerade ein Buch durch.....

in diesem wird in ein TableWidget via .setmodel() ein SqlTableModel eingefügt und dargestellt

wenn ich das ganze aber gemäß dem Bsp. teste.....

Code: Alles auswählen

QString table = "ip_log";
QSqlTableModel model;

model.setTable(table);
model.setHeaderData(0, Qt::Horizontal, tr("IP"));
model.setHeaderData(1, Qt::Horizontal, tr("Host"));
model.setHeaderData(2, Qt::Horizontal, tr("Date"));
model.setHeaderData(3, Qt::Horizontal, tr("Land"));
model.select();
ui->tableWidget_3->setModel(model);

bekomme ich

Code: Alles auswählen

mainwindow.cpp:785: Fehler:no matching function for call to 'QTableWidget::setModel(QSqlTableModel&)'
candidates are: virtual void QTableWidget::setModel(QAbstractItemModel*)
mir ist schon klar was die Build Meldung bedeutet.... aber warum wird es in dem Buch so aufgeführt und funktioniert nicht.....
und wie bekomme ich denn dann ein SqlTableModel in einen TableWidget angezeigt ??

mit freundlichen Grüßen
John

Re: QSqlTableModel - QTableView

Verfasst: 7. Dezember 2012 14:08
von brax
Naja, so ganz klar scheint Dir die Fehlermeldung ja nicht zu sein. Das Problem ist einfach, dass setModel einen Pointer haben will und keine Referenz. Grundsätzlich wäre darum

Code: Alles auswählen

ui->tableWidget_3->setModel(&model);
richtig.
Das ist allerdings auch problematisch, da model ja eine lokale Variable ist und gelöscht wird, wenn sie den Scope verlässt. Du solltest model daher per new auf dem Heap erzeugen. Dann musst Du Dir natürlich Gedanken darüber machen, wer das Ding irgendwann wieder delete'd, sonst gibt's ein Speicherloch.

Warum das Buch es so schreibt kann ich Dir nicht sagen. Vielleicht sagt das ja was über die Qualität des Buches aus (oder es ist für ne alte Qt Version geschrieben, aber ich glaube setModel hat schon immer einen Pointer bekommen).

Re: QSqlTableModel - QTableView

Verfasst: 9. Dezember 2012 18:28
von JohnR
Danke Dir !