Seite 1 von 1

Befehle in Threads zugreifen auf QMainWindow lässt abstürzen

Verfasst: 17. Juni 2010 20:43
von forgoden
Also, in QMainWindow-Konstruktor wird ein Thread erzeugt mit:

Code: Alles auswählen

mthread = new Thread(this);
mthread->start();
und im thread-methode habe ich folgendes probiert:

Code: Alles auswählen

void Thread::run() {
	QMainWindow *cparent = qobject_cast<QMainWindow *>(parent());
	cparent->resize(800,800);
}
Das Fenster hat zwar ihre Größe verändert, doch dann erscheint eine Fehlermeldung:
ASSERT failure in QCoreApplication::sendEvent: "Cannot send events to objects owned by a different thread. Current thread a10118. Receiver 'qt_app04Class' (of type 'qt_app04') was created in thread 3a7da0", file kernel\qcoreapplication.cpp, line 305
Was bedeutet das?

Verfasst: 17. Juni 2010 20:53
von Christian81
Man kann nicht auf die GUI aus einem Thread heraus zugreifen. Das geht nur im Hauptthread. Und genau das sagt Dir im Endeffekt auch diese Fehlermeldung.

Verfasst: 17. Juni 2010 21:24
von forgoden
okay, welche Lösungsansätze gibt es? Das es mit Signal und Slot geht, weiß ich.

Mein eigentlich Ziel war, in Threads mit QPaintEvent Pixel zu zeichnen, anstatt ìn einer Methode von einer vererbten QMainWindow.
(void qt_app04::paintEvent(QPaintEvent *) )

Weil jedes mal wenn ich das Fenster verschiebe, werden die bewegten Linien von QPaintEvent eingefroren. Außerdem habe ich das Befürchten, dass das Programm lahmgelegt wird, wenn mal ganz viele Pixel gezeichnet werden müssen. Oder ist QPaintEvent sein eigener Thread?


Ich kann mich noch lange her erinnern dass es in DirectDraw so eine Art clipping gibt, dass heisst, die Pixel werden unsichtbar gezeichnet, bevor die Pixel sichtbar werden. Macht man das bei QPaint auch?