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

Code: Alles auswählen

type()    QSqlError::StatementError()
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
Nvidia hat geschrieben:da steht so was, wenn ich das richtig verstehe:
http://doc.trolltech.com/4.6/qwidget.html#setStyle
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:

Code: Alles auswählen

QSqlDatabase: available drivers: QSQLITE QODBC3 QODBC
Deine Zeile:

Code: Alles auswählen

QSqlDatabase db = QSqlDatabase::addDatabase("SQL"); 
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
Betrug xD
die brauchen so was nicht.
http://doc.trolltech.com/4.6/sql-cachedtable.html

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?