【发布时间】:2014-12-18 18:22:04
【问题描述】:
假设我有一个包含SLOT listen() 的class cWorker : public QObject。这个对象被移动到一个单独的线程。
主窗口包含一个class GLWidget : public QGLWidget,它有一个SIGNAL request()
我如何connect 跨两个线程的信号槽?它应该是直截了当的,但我找不到任何示例代码。谢谢。
int main(int argc, char *argv[])
{
cWorker* worker = new cWorker();
QThread* thread = new QThread;
worker->moveToThread(thread);
QObject::connect(thread, SIGNAL(started()), worker, SLOT(work()) );
thread->start();
QApplication a(argc, argv);
MainWindow w;
GLWidget *my_gl_widget = w.findChild<GLWidget*>("widget");
// THIS DOESN'T WORK
QObject::connect(my_gl_widget, SIGNAL( request() ), worker, SLOT( listen() ));
w.show();
return a.exec();
}
【问题讨论】:
-
你怎么知道它不起作用?
connect返回什么?它输出什么错误?你检查my_gl_widget不为空吗? -
为什么在
MainWindow中没有一个返回GLWidget的函数?在这种情况下使用QObject::findChild是愚蠢的。 -
它编译并运行,插槽永远不会被执行。
-
回答我的其他三个问题和thuga的问题。
-
我只是在插槽中放了一个 cout。
标签: c++ multithreading qt