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

Alles rund um die Programmierung mit Qt
Antworten
caegger
Beiträge: 5
Registriert: 9. Februar 2007 09:50

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

Beitrag 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?
Zuletzt geändert von caegger am 13. Februar 2007 13:28, insgesamt 1-mal geändert.
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag 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);
Antworten