Installationsprogramm erstellen mit Qt Non-Commercial?

Dein Thema passt einfach in kein Forum? Dann probiers mal hier.
Antworten
justme
Beiträge: 7
Registriert: 14. April 2005 13:33

Installationsprogramm erstellen mit Qt Non-Commercial?

Beitrag 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!
ChMaster
Beiträge: 252
Registriert: 23. Februar 2005 14:44
Wohnort: RP -> Alzey
Kontaktdaten:

Beitrag 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)
ChMaster
------------ Projekte------------
DBoxFE
DMS
First4 (Plugin-Develper)
justme
Beiträge: 7
Registriert: 14. April 2005 13:33

Beitrag 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?
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag 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.
justme
Beiträge: 7
Registriert: 14. April 2005 13:33

Beitrag 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();
} 
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag 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.
justme
Beiträge: 7
Registriert: 14. April 2005 13:33

Beitrag 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?
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag 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
justme
Beiträge: 7
Registriert: 14. April 2005 13:33

Beitrag 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!
justme
Beiträge: 7
Registriert: 14. April 2005 13:33

Beitrag 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.
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag 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.
justme
Beiträge: 7
Registriert: 14. April 2005 13:33

Beitrag 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:
http://doc.trolltech.com/qq/qq10-windows-deployment.html#plugins hat geschrieben: So to make the JPEG plugin available to our showimg application, we just have to change directory to the application's directory and copy over the appropriate DLL:

Code: Alles auswählen

    mkdir imageformats
    copy %QTDIR%\plugins\imageformats\qjpeg100.dll imageformats
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 :D
Antworten