Seite 1 von 3
QT TableView
Verfasst: 27. April 2010 18:46
von Nvidia
Hallo,
ich möchte Daten in einer Tabelle anzeigen, die Daten kommen aus einer SQL Datenbank.
also für die Datenbank nehme ich die DataBase und Query Klasse.
Wenn ich eine Tabelle möchte, die man nur angucken kann,
eignet sich da TableView oder nimmt man da lieber was anderes?
Das möchte ja auch ein QAbstractItemModel haben, jetzt hab ich noch was von einem SQLModel gelesen, was eignet sich denn nun dafür am besten?
und bei diesen QStyles hab ich gelesen, dass man die nicht verwenden soll.
Warum? funktionieren die nicht gut außerhalb von QT?
nvidia
Verfasst: 27. April 2010 21:13
von 24dan
Also wenn ich das richtig verstanden habe möchtest Du hinterher mit den Daten in der Tabell mix mehr machen? Kontextmenü oder sowas ähnliches?
Dann sollte eigentlich QTabelWidget reichen.
Re: QT TableView
Verfasst: 28. April 2010 07:25
von franzf
Nvidia hat geschrieben:ich möchte Daten in einer Tabelle anzeigen, die Daten kommen aus einer SQL Datenbank.
also für die Datenbank nehme ich die DataBase und Query Klasse.
QTableView + QSqlQueryModel + QTableView::setEditTriggers(QAbstractItemView::NoEditTriggers);
und bei diesen QStyles hab ich gelesen, dass man die nicht verwenden soll.
Warum? funktionieren die nicht gut außerhalb von QT?
Quelle bitte. Das wäre ja ein Krampf wenn man keine QStyles verwenden dürfte...
Verfasst: 28. April 2010 13:05
von Troll.Soft
Du kannst den Typ der Fehlermeldung von lastError() abfragen. Dürfte sich kaum in naher Zukunft ändern und sollte bei unterschiedlichen Datenbanken gleich sein
tschüß
Troll.Soft
Verfasst: 28. April 2010 14:19
von Troll.Soft
Oops,
obige Antwort gehört eindeutig in einen andern Thread.
Du möchtest wohl so etwas wissen
Code: Alles auswählen
QSqlTableModel* Model = new QSqlTableModel(Dlg, Db);
Model->setTable(TableName);
Model->select();
View = new QTableView(Dlg);
View->setModel(Model);
View->show();
einfache Sache mit den Qt-Modellen und Views.
tschüß
Troll.Soft
Verfasst: 28. April 2010 16:31
von Nvidia
ja es gibt da so viele tables und modelle
da steht so was, wenn ich das richtig verstehe:
http://doc.trolltech.com/4.6/qwidget.html#setStyle
Verfasst: 28. April 2010 17:10
von franzf
Komplett anderer Kontext! Es geht darum, einen Style einem einzelnen Widget zuzuweisen. Dadurch wird die GUI im Aussehen inkonsitent (wenn man sich nicht nen Proxy-Style geschrieben hat).
Das andere Warning geht um Style Sheets.
Verfasst: 28. April 2010 18:47
von Nvidia
was heißt inkonsistent? macht das irgentwas großes aus? oder kann man das missachten
Verfasst: 28. April 2010 19:05
von franzf
Nvidia hat geschrieben:was heißt inkonsistent? macht das irgentwas großes aus? oder kann man das missachten
Was sollte inkosistent wohl bedeuten? Der vom User gesetzte Style ist dem User bekannt. Der Programmierer meint, er müsste jetzt einzelnen Elementen einen neuen Style verpassen, und verwendet QWidget::setStyle(). Und jetzt sind auf einmal Buttons nicht mehr gerundet sondern Eckig, verwenden die palette() in anderer Art, malen Rahmen anders, uswusf. Und das in Koexistenz mit dem normalen globalen Style in einer App!
Sowas ist ein Krampf! Fürs Auge und fürs Arbeiten.
Deshalb "use with care"!
Und ich würde (fast) nirgendwo davon ausgehen, dass wenn etwas als "nicht so doll", "falsch" oder (sieht man echt öfters) "undefiniertes Verhalten" bezeichnet ist man die Forderungen missachten sollte... Vor allem nicht wenn es in einer Programmierer-Doku steht und diese auch noch diejenige für Qt ist

Verfasst: 28. April 2010 19:44
von Nvidia
ok hab ich verstanden.
Also ich hab jetzt versucht mit Hilfe von dem sql-cachedtable Beispiel
meine Datenbank zu bauen. Aber ich krieg ein paar Fehler.
QSqlDatabase: SQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC3 QODBC
QSqlQuery::prepare: database not open
QSqlQuery::exec: database not open
QSqlQuery::exec: database not open
Driver?! im Beispiel steht nichts weiter von einem Driver.
Aber vielleicht hab ich was vergessen hier mein Code:
Code: Alles auswählen
#ifndef SQL_H
#define SQL_H
#include <QSqlQuery>
#include <QSqlDatabase>
static void database()
{
QSqlDatabase db = QSqlDatabase::addDatabase("SQL");
db.open();
QSqlQuery query;
query.prepare("INSERT INTO person (forename, surname) "
"VALUES (:forename, :surname)");
query.bindValue(":forename", "Bart");
query.bindValue(":surname", "Simpson");
query.exec();
}
#endif // SQL_H
Code: Alles auswählen
#include <QApplication>
#include <QtGui>
#include "mainwindow.h"
#include "SQL.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
database();
MainWindow Q;
Q.resize(880,550);
Q.show();
return app.exec();
}
//Normale Quelldatei
Code: Alles auswählen
QTableView *new_view = new QTableView();
QSqlQueryModel *model = new QSqlQueryModel(new_view);
model->setHeaderData(0, Qt::Horizontal, tr("First name"));
model->setHeaderData(1, Qt::Horizontal, tr("Last name"));
model->setQuery("SELECT firstname, surname FROM person");
new_view->setModel(model);
new_view->setEditTriggers(QAbstractItemView::NoEditTriggers);
Was hab ich falsch gemacht?
QtableWidget
Verfasst: 28. April 2010 19:57
von sowas
Hallo,
wo wird welcher Treiber geladen???
Ich würde sagen PC ausschalten, in Laden gehen und ein Qt-Buch besorgen.
Das Buch durcharbeiten und wenn dann noch Fragen sind sich wieder melden.
nichts für ungut. bk
Verfasst: 28. April 2010 20:03
von franzf
Nvidia hat geschrieben:Was hab ich falsch gemacht?
Doku nicht ordentlich gelesen.
Fehlermeldung nicht gelesen:
Deine Zeile:
Hier der Link zur Doku, falls du ihn verloren hast:
http://doc.qt.nokia.com/4.6/qsqldatabas ... ddDatabase
Verfasst: 28. April 2010 20:33
von Nvidia
Verfasst: 28. April 2010 20:51
von Troll.Soft
Nvidia hat geschrieben:
QSqlDatabase: SQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC3 QODBC
Aber vielleicht hab ich was vergessen hier mein Code:
QSqlDatabase db = QSqlDatabase::addDatabase("SQL");
He Jungs,
nun seid nicht zu hart zu ihm. Wenn man sich das erste Mal an Qt-Sql versucht ist nicht alles sofort einsichtig. Auch für einen erfahrenen Programmierer.
Dein System kennt genau die oben aufgeführten Treiber "available drivers: QSQLITE QODBC3 QODBC".
addDatabase erwartet genau einen dieser vorhandenen Treiber.
Code: Alles auswählen
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
Qt kennt folgende Treiber
Code: Alles auswählen
Driver Class name Constructor arguments File to include
QPSQL QPSQLDriver PGconn *connection qsql_psql.cpp
QMYSQL QMYSQLDriver MYSQL *connection qsql_mysql.cpp
QOCI QOCIDriver OCIEnv *environment, OCISvcCtx *serviceContext qsql_oci.cpp
QODBC QODBCDriver SQLHANDLE environment, SQLHANDLE connection qsql_odbc.cpp
QDB2 QDB2 SQLHANDLE environment, SQLHANDLE connection qsql_db2.cpp
QTDS QTDSDriver LOGINREC *loginRecord, DBPROCESS *dbProcess, const QString &hostName qsql_tds.cpp
QSQLITE QSQLiteDriver sqlite *connection qsql_sqlite.cpp
QIBASE QIBaseDriver isc_db_handle connection qsql_ibase.cpp
tschüß
Troll.Soft
Verfasst: 28. April 2010 21:05
von Nvidia
ok danke der Fehler ist weg =)
Aber die Datenbank ist immer noch zu nach der Fehlermeldung.
Aber mit db.open(); müsste die doch aufgehen?