我试图将信号从一个QObject连接到作为QT5文档中所定义的函子:连接(的QObject *,信号(信号()),算符)不QT5连接
http://doc.qt.io/qt-5/qobject.html#connect-5
相关代码:
namespace someNamespace
{
void processFinished()
{
qDebug() << "A Thread has finished processing!!!";
}
void executeWorkerOnSeparateTread()
{
QThread* thread = new QThread;
Worker* worker = new Worker();
worker->moveToThread(thread);
QObject::connect(worker, SIGNAL(finished()), thread, SLOT(quit()));
QObject::connect(worker, SIGNAL(finished()), worker, SLOT(deleteLater()));
QObject::connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
QObject::connect(thread, SIGNAL(started()), worker, SLOT(process()));
QObject::connect(worker, SIGNAL(finished()), processFinished); //DOES NOT COMPILE
thread->start();
}
}
如果我只是注释掉没有编译的行,这段代码编译并执行时没有问题。我只是无法获得连接编译。
编译器错误:
当然no matching function for call to 'QObject::connect(Worker*&, const char*, void(&)())'
工作者继承自QObject,并且在它的Q_OBJECT关键字。事实上,这种方法没有问题的线路也消除了其他线路成为问题。
任何想法,我在做什么错?在我看来,它应该是这个直截了当的。
如果相关,QT版本是5.8,GCC版本是4.8.5。
谢谢!
不是你的问题的答案,只是一个评论:你为什么不使用新的编译时检查'连接'语法?你正在使用一个足够新的Qt,它是可用的。摆脱丑陋的'SIGNAL'和'SLOT'宏,会给你编译时错误,而不是无法建立连接时的运行时错误。 –
@JesperJuhl其实我认为这就是答案。查看文档,使用函子的'connect()'静态函数没有支持旧信号/插槽语法的版本。 – MrEricSir
@MrEricSir我会提交它作为答案,然后我们会看到它是如何判断;) –