QT Dialoge aus DLLs in Nicht-QT-Anwendung
Verfasst: 13. März 2009 20:23
Hallo,
ich habe das folgende, etwas komplizierteres Problem mit QT:
Ich habe ein GUI Programm, das nicht mit QT entwickelt wurde, sondern z.B. mit wxWidgets. In dem Programm werden Komponenten als DLL
dazugeladen. Jede Komponente hat ein eigenes Dialog-Fenster, das
ich gerne öffnen und anzeigen möchte und das mit QT erstellt wurde.
Ich habe verstanden, dass ich in jeder Anwendung eine QApplication brauche, die ich natürlich in meinem Fall nicht habe.
Aus diesem Grund binde ich an meine wxWidget Anwendung ein DLL an, die die QApplication in einem eigenen Thread enthält. Über diese DLL werden alle Komponenten gesteuert, und die Anzeige der Dialoge funktioniert auch gut. Ein Problem tritt jedoch leider auf, wenn ich alle DLLs entlade. In diesem Fall werden die Fenster der Komponenten geschlossen, und auch die DLL mit der QApplication wird sauber entladen, nach kurzer Zeit jedoch stürzt die weiterlaufende wxWidget-Anwendung ab.
Der Callstack deutet daraufhin, dass es daran liegt, dass irgendwas von QT im event-loop verblieben ist, im wxWidget Fall kommt die Exception zum Beispiel aus der Funktion wxEvtHandler::ProcessEvent.
Dasselbe Vorgehen funktioniert übrigens OHNE Probleme, wenn ich eine Konsolenanwendung (ohne event-loop) verwende.
Meine Frage: Wie kann ich mein Vorhaben, QT in eine Nicht-Qt-WIN32 Anwendung einzubinden, so gestalten, dass diese Exception vermieden wird? Alles läuft gut, aber die DLL entladen darf ich offenbar nicht. Vielleicht muss man sich da irgendwie abmelden, bevor man es macht?
Ich habe irgendwo mal etwas von einer Funktion gelesen, die Qt genau zu dem Zweck anbietet, von win32 auf QT umzusteigen, kann mich aber nicht mehr genau erinnern...
Ich bin für jede Hilfe dankbar, viele Grüße,
HKA
ich habe das folgende, etwas komplizierteres Problem mit QT:
Ich habe ein GUI Programm, das nicht mit QT entwickelt wurde, sondern z.B. mit wxWidgets. In dem Programm werden Komponenten als DLL
dazugeladen. Jede Komponente hat ein eigenes Dialog-Fenster, das
ich gerne öffnen und anzeigen möchte und das mit QT erstellt wurde.
Ich habe verstanden, dass ich in jeder Anwendung eine QApplication brauche, die ich natürlich in meinem Fall nicht habe.
Aus diesem Grund binde ich an meine wxWidget Anwendung ein DLL an, die die QApplication in einem eigenen Thread enthält. Über diese DLL werden alle Komponenten gesteuert, und die Anzeige der Dialoge funktioniert auch gut. Ein Problem tritt jedoch leider auf, wenn ich alle DLLs entlade. In diesem Fall werden die Fenster der Komponenten geschlossen, und auch die DLL mit der QApplication wird sauber entladen, nach kurzer Zeit jedoch stürzt die weiterlaufende wxWidget-Anwendung ab.
Der Callstack deutet daraufhin, dass es daran liegt, dass irgendwas von QT im event-loop verblieben ist, im wxWidget Fall kommt die Exception zum Beispiel aus der Funktion wxEvtHandler::ProcessEvent.
Dasselbe Vorgehen funktioniert übrigens OHNE Probleme, wenn ich eine Konsolenanwendung (ohne event-loop) verwende.
Meine Frage: Wie kann ich mein Vorhaben, QT in eine Nicht-Qt-WIN32 Anwendung einzubinden, so gestalten, dass diese Exception vermieden wird? Alles läuft gut, aber die DLL entladen darf ich offenbar nicht. Vielleicht muss man sich da irgendwie abmelden, bevor man es macht?
Ich habe irgendwo mal etwas von einer Funktion gelesen, die Qt genau zu dem Zweck anbietet, von win32 auf QT umzusteigen, kann mich aber nicht mehr genau erinnern...
Ich bin für jede Hilfe dankbar, viele Grüße,
HKA