Seite 1 von 1

QWizard-Widget erzeugen in Nicht-GUI Thread schlägt fehl

Verfasst: 16. April 2008 15:14
von TBerger
Hallo,

ich benutze zum Ausführen meiner CppUnit-Testcases die QXRunner GUI. Allerdings habe ich bei einem Testcase ein Problem:
ASSERT failure in QWidget: "Widgets must be created in the GUI thread.", file kernel\qwidget.cpp, line 937
Und zwar tritt die Exception auf, wenn ich in meinem TestCase diesen Code aufrufe:

Code: Alles auswählen

void PageTests::setUp() {
	mWizard = new SwampInstallWizard(0);
}
SwampInstallWizard hat folgenden Konstruktor:

Code: Alles auswählen

SwampInstallWizard::SwampInstallWizard(QWidget *parent) :
	QWizard(parent) {
...
}
Wenn ich nicht QXRunner benutze, sondern die konsolenbasierte Ausgabe von CppUnit benutzte tritt diese Exception nicht auf.

Ich mache selbst keinen eigenen Thread auf, um die Testcases auszuführen, o.ä.

Kann mir jemand weiterhelfen? Ist das ein bekanntes Problem beim QWizard? Oder habe ich einen Denkfehler`?

Viele Grüße,
Thomas

Verfasst: 16. April 2008 15:16
von Christian81
QWizard ist in QtGui - wenn keine QApplication-Instanz da ist, dann auch keine Gui-Funktionaliät.
Also scheint CppUnit QApplication zu instanziieren, QXRunner nicht.

Verfasst: 16. April 2008 15:31
von TBerger
Hi,

danke für die Antwort. Allerdings ist das trotzdem verwunderlich, da ich immer als erstes in meiner main-Methode eine QApplication Instanz erzeuge. Erst danach erzeuge ich wahweise den konsolenbasierten CppRunner oder eben den grafischen QxRunner. Okay, QxRunner zeigt zwar selbst eine GUI, die Ausführung wird aber wohl durch eine Nicht-GUI-Klasse asynchron angestoßen. Kann man da irgendwas machen?

Verfasst: 23. April 2008 17:10
von TBerger
Hallo,

kennt denn sonst niemand das Problem? Ich habe jetzt gemerkt, dass es nicht am Qwizard liegt, sondern seit Qt 4.3.4 das Problem bei allen Widgets in Verbindung mit QxRunner auftritt. In früheren Versionen hatte ich nicht das Problem.
Mit QApplication hat es wie vermutet natürlich nichts zu tun, denn diese Instanz ist vorhanden, ich kann ja auch mit dem qApp Makro ohne Probleme darauf zugreifen.

Verfasst: 23. April 2008 17:24
von Christian81
Vielleicht mal bei QxRunner nachfragen - scheint hier keiner zu benutzen. Die News sind auch 'etwas' outdated. Und das hier ist lustig:
22. Jan. 2007 QxRunner built with a Qt version 4.1.x will not run properly with dynamic libraries of Qt versions 4.2.x. Won't crash but GUI will behave incorrectly.
Und Du wunderst Dich warum es nicht mit Qt 4.3.x geht :)