Die Lösung heißt übrigens
exec
Code:
class MyThread : public QThread
{
Q_OBJECT
private:
void run();
public:
explicit MyThread (QObject *parent = 0);
};
Code:
MyThread::MyThread(QObject *parent) :
QThread(parent)
{
}
void MyThread::run() {
exec(); // Message-Loop starten
}
Anschließend kann man andere QObjects mit
moveToThread
dem Thread zuordnen, und die Signals und Slots für dieses Objekt laufen dann über die Thread-Message-Queue:
Code:
class MyObject : public QObject
{
Q_OBJECT
public signals:
void mySignal();
public slots:
void MySlot();
}
Code:
MyThread* thread = new MyThread();
myThread->start();
// Objekt a "läuft" im separaten Thread
MyObject* a = new MyObject();
a->moveToThread(thread);
// Objekt b "läuft" im Main-Thread
MyObject* b = new MyObject();
connect(b, SIGNAL(mySignal()), a, SLOT(mySlot()));
Wenn b jetzt irgendwann mySignal() auslöst, dann ist das so, als ob b eine Message an a schickt (genauergesagt eine Thread-Message an den Thread, der sie wiederum ans richtige Objekt weiterleitet). Qt macht das alles automatisch.
*** gelöst ***