jwebworks
10-05-2003, 20:43
Hallo, Leute,
ich beschäftige mich neuerdings mit Qt und C++.
Um das ganze richtig zu machen lernt man Neues
am besten in der praktischen Anwendung. Ich habe
jetzt schon einiges mit GUI-Elementen herumgespielt
und untereinander zum "agieren" gebracht. :-)
Ich habe ein Hauptfenster in dem in einem
"widgetStack" tausche ich benötigte Unterwidgets
aus. In den verschiedenen UWs möchte ich auf ein
einziges globales QSqlDatabase-Objekt zugreifen.
Eine Verbindung pro Anwendung zur Datenbank
reicht ja wohl :)
Leider habe ich nach einigem Ausprobieren keine Ahnung,
wie das funktionieren soll.
Als erstes habe ich probiert, das Objekt als public
static Attribut in meinem MainWidget einzubinden.
Das hat funktioniert beim kompilieren, aber der
Linker hat mir einen Fehler gemeldet (irgendwas
mit "unresolved reference").
Als nächstes habe ich eine eigenständige Variable
definiert.
Folgende config.h:
#ifndef CONFIG_H
#define CONFIG_H
#define SQL_HOST "localhost"
#define SQL_USER "user"
#define SQL_PASS "pass"
#define SQL_BASE "base"
#include <qsqldatabase.h>
static QSqlDatabase* sqlDatabase;
#endif
in meinem MainWiget wird die Datenbank ganz normal
initialisiert. Sobald ich aber jetzt einen Testaufruf von
einem anderen Widget, das ich in den WidgetStack
geladen habe ausführe, stürzt meine Anwendung mit
einem Speicherzugriffsfehler ab.
Meine Fragen:
Habe ich einen grossen Denkfehler gemacht?
Wie wird das mit dem Datenbankobjekt sonst gelöst?
Ist es falsch, wenn ich das Interface meiner Anwendung
komplett durch ein neues Widget austauschen möchte,
und ich das durch Anlegen und Löschen mit einem WidgetStack
realisiere? Menüzeile und Statuszeile bleiben dabei
bestehen.
Über einige Tips, die meinen Start in die Qt/C++-Welt
erleichtern würden wäre ich dankbar :-) Momentan habe
ich das Buch "Programming with Qt" von "Matthias Kalle
Dalheimer" und die Tutorials der Qt-Doc durchgearbeitet.
Danke sehr ;)
cu, stop.h
ich beschäftige mich neuerdings mit Qt und C++.
Um das ganze richtig zu machen lernt man Neues
am besten in der praktischen Anwendung. Ich habe
jetzt schon einiges mit GUI-Elementen herumgespielt
und untereinander zum "agieren" gebracht. :-)
Ich habe ein Hauptfenster in dem in einem
"widgetStack" tausche ich benötigte Unterwidgets
aus. In den verschiedenen UWs möchte ich auf ein
einziges globales QSqlDatabase-Objekt zugreifen.
Eine Verbindung pro Anwendung zur Datenbank
reicht ja wohl :)
Leider habe ich nach einigem Ausprobieren keine Ahnung,
wie das funktionieren soll.
Als erstes habe ich probiert, das Objekt als public
static Attribut in meinem MainWidget einzubinden.
Das hat funktioniert beim kompilieren, aber der
Linker hat mir einen Fehler gemeldet (irgendwas
mit "unresolved reference").
Als nächstes habe ich eine eigenständige Variable
definiert.
Folgende config.h:
#ifndef CONFIG_H
#define CONFIG_H
#define SQL_HOST "localhost"
#define SQL_USER "user"
#define SQL_PASS "pass"
#define SQL_BASE "base"
#include <qsqldatabase.h>
static QSqlDatabase* sqlDatabase;
#endif
in meinem MainWiget wird die Datenbank ganz normal
initialisiert. Sobald ich aber jetzt einen Testaufruf von
einem anderen Widget, das ich in den WidgetStack
geladen habe ausführe, stürzt meine Anwendung mit
einem Speicherzugriffsfehler ab.
Meine Fragen:
Habe ich einen grossen Denkfehler gemacht?
Wie wird das mit dem Datenbankobjekt sonst gelöst?
Ist es falsch, wenn ich das Interface meiner Anwendung
komplett durch ein neues Widget austauschen möchte,
und ich das durch Anlegen und Löschen mit einem WidgetStack
realisiere? Menüzeile und Statuszeile bleiben dabei
bestehen.
Über einige Tips, die meinen Start in die Qt/C++-Welt
erleichtern würden wäre ich dankbar :-) Momentan habe
ich das Buch "Programming with Qt" von "Matthias Kalle
Dalheimer" und die Tutorials der Qt-Doc durchgearbeitet.
Danke sehr ;)
cu, stop.h