Mantendré el código simple para que puedan ver lo que estoy tratando de hacer;) Soy consciente de todos los problemas de bloqueo, etc. Estoy intentando para descubrir cómo las señales y las ranuras juegan con los hilos.Uso de Qt donde hilo de trabajo crea elementos nuevos de GUI
En main.cpp:
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
MyConsole c; // Subclasses QThread and implements run()
MyReceiver r(app); // We pass app to MyReceiver for later (see below)
QObject::connect(&c, SIGNAL(sendit()),
&r, SLOT(gotit()));
c.start(); // Start the worker thread
app.exec();
}
Supongamos que las señales y las ranuras se han establecido correctamente en los archivos de cabecera (que he probado y que son). Ahora, aquí está el problema:
En MyReceiver.cpp:
void MyReceiver::gotit()
{
QLabel *label = new QLabel(0, "Hello"); // Some GUI element, any will do
app.setMainWidget(*label); // Some GUI action, any will do
}
La pregunta es: porque el objeto MyReceiver fue creado en main(), que está en el hilo principal, ¿quiere decir que las ranuras (Por ejemplo, gotit()) se ejecutará en el hilo principal y por lo tanto son seguros para hacer cosas de GUI? Incluso en los casos en que la señal se elevó desde un QThread diferente (como MyConsole en este ejemplo)?
Existe una mejor manera de permitir que los subprocesos de trabajo interactúen con la GUI (por ejemplo, Obj-C/Cocoa tiene un tipo de enfoque de "enviar mensaje en el subproceso principal"). ¿Cuál es la "forma de Qt" de hacer esto?
¡Gracias de antemano!
¿Te responde http://stackoverflow.com/questions/638251/how-to-emit-cross-thread-signal-in-qt? –