Seite 1 von 1

[gelöst]Kommunikation GUI <-> NON GUI Thread, "po

Verfasst: 12. Februar 2007 10:14
von caegger
Zur Kommunikation zwischen einem GUI und einem NON GUI Thread unter Qtopia 4.x habe ich die Methode postEvent eingesetzt:

Code: Alles auswählen


cmain.cpp:

void CMainApp::Init()
{

   ....
   // bestimmen des Zielobjekts m_pMainframe
   m_threadCJogdial.setTargetWidget(m_pMainframe);  
   // NON GUI Thread
   m_threadCJogdial.start(); 
   ....
   m_pMainframe->Init();
}

cjogdialthread.cpp:

void setTargetWidget(QWidget *targetWidget)
{

  target_Widget = targetWidget;

}

void JogdialThread::run()
{

   ....

   // send des Events 'e' an das Ziel Widget 'm_pMainframe'
   QApplication::postEvent(targetWidget, e)

}

Das Compilieren funktionier auch einwandfrei. Leider erhalte ich beim Auslösen des Events 'e' den Laufzeitfehler 'Receiver is not a valid QObject'
Ich habe es bereits mit Zeigerkonvertierung versucht, leider erfolglos. Meine Frage ist, wie kann ich für die Methode 'postEvent' aus meinem NON GUI thread heraus, mein Zielobjekt bestimmen?

Verfasst: 13. Februar 2007 09:03
von lepsai
Früher ging's ohne Probleme, mit Qt 4 gibt es eine elegantere Lösung:

void CMainApp::Init()
{
connect(this, SIGNAL(emitSomethingToGUIThread(void*data), this, SLOT(onWorkerThreadDataReceived(void*data)), Qt:QueuedConnection);
}


void CMainApp::run()
{
... do something
emit emitSomethingToGUIThread(myData);
}


CMainApp::onWorkerThreadDataReceived(void* data)
{

}


// CMainApp header
signals:
void emitSomethingToGUIThread(void*);

protected slots:
onWorkerThreadDataReceived(void* data);