Mindestvoraussetzung für die Lauffähigkeit Qt + Setup

Verschiedenes zu Qt
Antworten
jw202
Beiträge: 36
Registriert: 6. August 2012 22:25

Mindestvoraussetzung für die Lauffähigkeit Qt + Setup

Beitrag von jw202 »

hallo,

ich programmiere schon seit längerem Applikationen für Linux Systeme. Kürzlich erhielt ich einen Auftrag für ein plattformunabhängiges Programm, dass so ziemlich auf jedem System (Linux, Windows, Mac) funktionieren sollte. ich hab mich für Qt entschieden und mit QtCreator eine Qt-Anwendung programmiert. Ich habe nur Qt eigene Werkzeuge benützt und keine LIbrarys eingebunden - außer eben die von Qt. Testweise habe ich den QtCreator auf einem Windows installiert (was relativ schwer war, da ich kein Windows System besitze) und das Programm kompiliert. Aus dem Qt-Creator lässt es sich direkt öffnen. Beim manuellen Öffnen jedoch verlangt die exe-file irgendwelche DLLs. Mir ist schon klar, dass ich da die Path Variable umschreiben kann etc, aber ich bräuchte hier eine Möglichkeit um dieses Programm den Standard-Normalverbraucher zukommen zu lassen. Dieser sollte das Programm per Mausklick installieren können. Es sollte quasi eine exe-file herauskommen die überall und auf jeden Windows-Computer funkioniert. Ich hab mir statisches Linken angeschaut, jedoch hat sich trotz CONFIG += static in der .Pro datei nichts an der Größe der exe-file geändert.

von VisualBasic habe ich in Erinnerung, dass es da so Setup-Projekte gibt, welche die nötigen DLLs mitinstallieren. Hat jemand Erfahrung für eine Setup möglichkeit für Qt Apps?


BTW.: ich hab keine Ahnung von Macintosh, Apple oder wie auch immer das jetzt neuerlich heißt. Trotzdem wäre eine eine Mac Anwendung auch toll. Auch in diese Richtung wäre ich für ein Tutorial dankbar, aber die Lauffähgikeit auf Windows steht hier mal im Vordergrund.
brax
Beiträge: 208
Registriert: 11. Mai 2010 11:22

Re: Mindestvoraussetzung für die Lauffähigkeit Qt + Setup

Beitrag von brax »

Unter Windows reicht es völlig die benötigten dlls in den gleichen Ordner wie die exe zu legen. In Deinem Fall sind die benötigten dlls wohl die Qt dlls.

Was den Installer angeht würde ich nsis empfehlen: http://sourceforge.net/projects/nsis/
jw202
Beiträge: 36
Registriert: 6. August 2012 22:25

Re: Mindestvoraussetzung für die Lauffähigkeit Qt + Setup

Beitrag von jw202 »

hallo,

ich habe es jetzt auf einem 64 Bit Windows 7 kompiliert. Folgende dlls müssen im selben Ordner sein, damit das Programm lauffähig ist.
libgcc_s_dw2-1.dll
mingwm10.dll
QtCored4.dll
QtGuid4.dll
QtSqld4.dll
nun habe ich das Programm auf einen anderen Computer (Windows XP 32 Bit) getestet. Die grafische Oberfläche funktionierte zwar, allerdings ließen sämtliche Funktionen (unter anderem QPrinter und die Sqlite Datenbank) zu wünschen übrig. Liegt das am unterschiedlichen System 32 Bit und 64Bit, oder liegt es daran dass die QtCreator nicht installiert ist?
brax
Beiträge: 208
Registriert: 11. Mai 2010 11:22

Re: Mindestvoraussetzung für die Lauffähigkeit Qt + Setup

Beitrag von brax »

Ehrlich gesagt ist "läßt zu wünschen übrig" eine reichlich ungenaue Fehlerbeschreibung.

64/32Bit wäre nur ein Problem, wenn Du das Programm für 64Bit kompiliert hättest. Dann würde es aber auf dem XP gar nicht erst starten.

Wenn ich mir die Dateinamen der dlls angucke, scheinst Du allerdings einen Debug-Build gemacht zu haben. Versuch das ganze nochmal als Release zu kompilieren und teste es damit mal.
jw202
Beiträge: 36
Registriert: 6. August 2012 22:25

Re: Mindestvoraussetzung für die Lauffähigkeit Qt + Setup

Beitrag von jw202 »

damit ist gemeint, dass Signale und Buttons funktionieren. man sieht auch die Benutzeroberfläche. Aber ich bekomme keine Daten aus der Datenbank und QPrinter sollte eine PDF erstellen aber ich bekomm ein leeres weißes dokument.
harry_m
Beiträge: 74
Registriert: 26. April 2010 23:16

Re: Mindestvoraussetzung für die Lauffähigkeit Qt + Setup

Beitrag von harry_m »

Die Datenbank wird wohl über ein Plugin funktionieren. Mit der Plugin Verwaltung habe ich erst vor kurzem kämpfen müssen. Wenn man alles endlich richtig gemacht hat, scheint alles logisch und selbstverständlich. Ich habe mich über die Kleinigkeiten maßlos geärgert: so, dass ich beschlossen habe, das ganze "drumherum" zusammen zu schreiben. Aber noch bin ich nicht so weit.

Lese mal hier:
http://doc.qt.nokia.com/4.7-snapshot/de ... ugins.html

es ist wirklich alles wichtige drin. Habe ich später selbst feststellen müssen. Vor allem, sehe dir genau an, was hier herauskommt:

QLibraryInfo::location(QLibraryInfo::PluginsPath),
QCoreApplication::applicationDirPath()

und benutze dann

QCoreApplication::setLibraryPaths()

um deine Applikation richtig zu konfigurieren.

Ganz wichtig!!!
QCoreApplication::applicationDirPath() gibt nur bei einer ".exe" Datei den richtigen Pfad aus: bei einer ".dll" ist es NICHT der Fall. Ich habe ein ActiveX Control gebastelt und habe angenommen, dass "QCoreApplication::applicationDirPath()" mir den Pfad zurück liefert, wo sich die DLL befindet. Weit gefehlt: es war Pfad des IE, der dieses Control aufgerufen hat.

Die nächste Gemeinheit bei den Plugins: wenn diese Fehlen, passiert eben nix. Fehlt irgendeine Bibliothek, gibt es einen Hinweis in Form eines Absturzes, wo sogar zu lesen ist, was genau fehlt. Bei den fehlenden Plugins fehlt nur die Funktion.

Bei dir bin ich mir absolut sicher, dass es sich hier wieder mal um das fehlende SQL-Plugin handelt.
Zwei Tragödien gibt es im Leben: die eine - nicht zu bekommen, was das Herz wünscht, und die andere: es doch zu bekommen. (Oscar Wilde)
jw202
Beiträge: 36
Registriert: 6. August 2012 22:25

Re: Mindestvoraussetzung für die Lauffähigkeit Qt + Setup

Beitrag von jw202 »

es gibt wieder Neuigkeiten:

1) ich habe es mit Release und Debug von Qt 4.8 und 4.7 getestet und bei allen gibt es diesselbe Reaktion. Es wird wohl an den Plugins liegen

2) Sofern ich es mit dem QtCreator öffne, sind die Umgebungsvariablen derartig eingestellt, dass ich das File ohne DLLs im selben öffnen kann. Wenn ich die Datei händisch öffne, dann fragt er nach den DLLs. Sind diese auch vorhanden, so funktioniert alles ohne Probleme.

3) auf einem Windows XP ohne QtCreator Installation geht es mit den DLLs im selben Ordner zwar öffnen, jedoch funktioniert das Datenbank-Plugin garnicht und der QPrinter liefert eine leere Ausgabe.



Btw, ich habe SQL mit Qt += sql in der .pro Datei eingebunden.

Mir steht heute leider kein Windows mehr zur Verfügung. Muss morgen weiter schauen.


Btw wäre statisches Linken eine Alternative? Weil wenn ich das File irgendwie statisch Linken könnte, dann wäre es zwar ultra-riesig aber dafür bräuchte ich nicht 100 Dateien extra mitschleppen.
harry_m
Beiträge: 74
Registriert: 26. April 2010 23:16

Re: Mindestvoraussetzung für die Lauffähigkeit Qt + Setup

Beitrag von harry_m »

jw202 hat geschrieben: Btw, ich habe SQL mit Qt += sql in der .pro Datei eingebunden.
Das reicht aber nicht. Die SQL Plugins befinden sich im Verzeichnis

.../plugins/sqldriver (oder ähnlich, weiß jetzt nicht auf Anhieb...)

Es muss sichergestellt werden, dass diese Plugins bei der Ausführung genau so bekannt gegeben werden. Sprich:

..runtimeverzeichnis/plugin

und in diesem Verzeichnis muss genau so ein Unterverzeichnis

/sqldriver

angelegt werden: dorthin gehören die Plugins.
Zwei Tragödien gibt es im Leben: die eine - nicht zu bekommen, was das Herz wünscht, und die andere: es doch zu bekommen. (Oscar Wilde)
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Mindestvoraussetzung für die Lauffähigkeit Qt + Setup

Beitrag von Christian81 »

Falsch.
Das Verzeichnis 'sqldrivers' (und auch andere Plugin-Verzeichnisse wenn man sie benötigt) muss direkt dorthin wo das Executable liegt. Hatten wir aber schon zig mal ...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
harry_m
Beiträge: 74
Registriert: 26. April 2010 23:16

Re: Mindestvoraussetzung für die Lauffähigkeit Qt + Setup

Beitrag von harry_m »

Komisch.
Ausgerechnet gestern habe ich es machen müssen: und stellte fest, dass es so funktioniert, wie ich es beschrieben habe.
Zwei Tragödien gibt es im Leben: die eine - nicht zu bekommen, was das Herz wünscht, und die andere: es doch zu bekommen. (Oscar Wilde)
Antworten