Seite 1 von 1
Installationsprogramm erstellen mit Qt Non-Commercial?
Verfasst: 14. April 2005 13:43
von justme
Hallo zusammen,
Als Neuling hier und zu Qt möchte ich erst einmal vielen Dank für dieses Forum sagen, gefällt mir sehr gut!
Natürlich habe ich auch noch etwas auf dem Herzen: Ich habe soeben mit der Non-Commercial-Version der Qt ein erstes kleines Projekt erstellt und für Windows und Linux erfolgreich kompiliert. So weit, so gut. Wie aber gehe ich nun vor, wenn ich dieses Programm weitergeben möchte? Statisch kann ich die Non-Commercial scheinbar nicht linken, wie ich einem anderen Beitrag hier entnommen habe.
Welche Dateien muß / darf ich also weitergeben, und wohin müssen diese jeweils kopiert werden? Ein erster Versuch, die qt-mtnc321.dll und qsqlite.dll (ich verwende QSQLITEX zum DB-Zugriff) in das Programmverzeichnis zu kopieren, ist daran gescheitert, daß ich keine Verbindung zur Datenbank erhalte: "Driver not loaded".
EDIT: Ein Installationsprogramm möchte ich in erster Linie für die Windows-Benutzer erstellen.
Ich würde mich freuen, wenn mir hier der entscheidende Hinweis gegeben wird!
Verfasst: 14. April 2005 13:57
von ChMaster
moin,
setup programm gibt es
hier kostet
nicht die welt, ich benutz es selber

wenn du das geld nicht hast schau einfach mal bei
sf.net nach
mit was wurde die non-comercial version erstellt?
wenn mit MS VS C++ .Net musst du die msvcp71.dll
und die msvcr71.dll mit leifern (einfach ins programm-
verzeichnis kopieren und natürlich die dlls von qt, also
qt-mtnc321.dll und die qsqlite.dll)
Verfasst: 14. April 2005 15:15
von justme
Als Installer dachte ich an
InnoSetup - ist kostenlos für meine Zwecke und ich habe bereits gute Erfahrungen damit gemacht.
Womit die Qt erstellt wurde, kann ich leider nicht sagen - es handelt sich um die bei dem von Jasmin Blanchette verfassten Buch "C++ GUI Programming with Qt3" mitgelieferte Version.
Das Programm wurde mit VC++ 6 erstellt, die msvcp60.dll habe ich bereits beigefügt und wie die beiden Qt-DLLs (qsqlite.dll, qt-mtnc321.dll) ins Programmverzeichnis kopiert. Jedoch besteht hierbei das Problem, daß die Verbindung zur SQLite-DB nicht erstellt werden kann, sh. oben. Kann es sein, daß die Qt den SQLite-Treiber in einem speziellen Verzeichnis erwartet?
Verfasst: 14. April 2005 18:58
von FlorianBecker
Das Problem ist, das die qt Lib das Plugin nicht laden kann.
Entweder du gibst den Plugin Pfad mit QApplication::addLibraryPath("pfad") an, oder du legst es nach plugins/sqldrivers und setzt das QTDIR auf pfad bei einer installation des Programmes.
Verfasst: 15. April 2005 14:16
von justme
Vielen Dank für den Hinweis. Leider hat auch das Setzen des QTDIR nicht den erhofften Erfolg gebracht, wie auch QApplication::addLibraryPath(".") nichts genützt hat

Selbst ein Registry-Eintrag, den ich gefunden habe in HKLM/Software/Trolltech, brachte keine Veränderung.
Ich bin ratlos.
Vielleicht hilft der Quellcode, mir zu helfen:
Code: Alles auswählen
#include <qapplication.h>
#include <qsqldatabase.h>
#include "form1.h"
bool createConnection()
{
QSqlDatabase *db = QSqlDatabase::addDatabase("QSQLITEX");
db->setDatabaseName("s4s.db");
if (!db->open())
{
db->lastError().showMessage();
return false;
}
return true;
}
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
QApplication::addLibraryPath(".");
if (!createConnection())
return 1;
frmMain *dialog = new frmMain();
app.setMainWidget(dialog);
dialog->show();
return app.exec();
}
Verfasst: 15. April 2005 14:20
von FlorianBecker
Mh, das Plugin gehört aber schon zu der gleichen Qt Version, oder?
Außerdem musst du als Library Path den absoluten Pfad angeben.
Verfasst: 15. April 2005 14:27
von justme
Ja, die Datei sqlite.dll stammt von der gleichen Qt-Version. Im Library-Path hatte ich testweise auch bereits den absoluten Pfad stehen, und die Datei sqlite.dll sowohl im angegeben Verzeichnis als auch zusätzlich unter plugins/sqldrivers, leider ohne Erfolg.
Die Meldung "Driver not loaded" an sich ist ja relativ wenig aussagekräftig, gibt es dabei keine Möglichkeit, erweiterte Debug-Informationen ausgeben zu lassen?
Verfasst: 15. April 2005 14:32
von FlorianBecker
Also unter Linux geht das, oder auch mit einer als Debug gebauten Version, mit der Version wohl kaum.
Mh, also das ist sehr seltsam, geht es denn, wenn du das Qt installierst und dann ohne Library Path? Weil dann sollte er nämlich direkt im QTDIR/plugins/sqldrivers nachsehen. Achja, er lädt auch keine Plugins, wenn evtl. Abhänigkeiten fehlen. Wobei er das SQLite Plugin statisch gegen sqlite linkt sollte das aber ehr nicht der Fall sein.
Du, sonst habe ich leider keine Ahnung. Teste es aus unter Linux und mache es dann genauso unter Windows. Übrigens ich hatte mich mit dem Pfad mal verschieben, habe plugins/sqldriver genommen, bis ich darauf kam, da verging schon einiges an Zeit. Die Plugins sind ehrlich gesagt ziemlich dumm in Qt. Es gibt zwar immer eine Lösung, aber bisher noch keine wirklich gute. Selbst statisch Linken ist dumm, weil dann die Abhänigkeiten von MySQL oder anderen immer vorhanden sein muss.
Guck vielleicht auch nochmal in qtforum.org
Verfasst: 15. April 2005 14:43
von justme
Vielen Dank für Deine Mühe!
Leider muss ich sagen, daß ich unter Linux entwickelt habe und dort keine Probleme damit hatte.
Unter Windows habe ich nun 2 verschiedene Rechner zum Testen: Der eine, mit dem ich die .EXE kompiliert habe - dort ist natürlich auch die Qt installiert.
Auf dem zweiten Rechner habe ich gerade testweise die gesamte Qt hinüberkopiert und QTDIR entsprechend gesetzt. Komischerweise funktioniert es nicht einmal damit.
Ich werde mich dann einmal an qtforum.org wenden. Vielen Dank noch einmal für alle, die hier versucht haben, mir weiterzuhelfen!
Verfasst: 16. April 2005 15:34
von justme
So, auf qtforum.org bin ich auf folgenden interessanten Link gestoßen:
http://doc.trolltech.com/qq/qq10-window ... ml#plugins
Ich habe also einen Denkfehler begangen: Ich hatte die qsqlite.dll im Verzeichnis <anwendung>\plugins\sqldrivers platziert - Qt jedoch erwartete sie im Verzeichnis <anwendung>\sqldrivers. Nun funktioniert es, auch ohne den addLibraryPath-Aufruf.
Verfasst: 16. April 2005 16:24
von FlorianBecker
Ahja. Das ist aber nicht die allgemein gültige Lösung. Außerdem steht in der Anleitung: %QTDIR%\plugins\imageformats\
Naja, Hautpsache deine Lösung geht.
Verfasst: 16. April 2005 19:04
von justme
FlorianBecker hat geschrieben:Ahja. Das ist aber nicht die allgemein gültige Lösung. Außerdem steht in der Anleitung: %QTDIR%\plugins\imageformats\
Ja, das steht darin. Das gibt aber das Quellverzeichnis an, aus dem die betreffende Datei kopiert wird:
Es wird also im Anwendungsverzeichnis ein Unterverzeichnis "imageformats" erstellt und darin die Plugin-DLL kopiert. Ich nehm also an, daß meine Lösung damit konform geht.
FlorianBecker hat geschrieben:
Naja, Hautpsache deine Lösung geht.
Stimmt
