Qt的信号槽在平常工作中用的很多,今天在调试程序的时候,出现了两种链接失败的情况。链接代码如下:
bool b = connect(this, SIGNAL(signalTest(std::string, unsigned int)), SLOT(onTest(std::string, unsigned int)));
当b返回为true的时候,信号发送后,不能触发槽函数。
1.原因是Qt里面没有注册std::string类型,需要注册后,才能真正链接成功。
qRegisterMetaType<std::string>("std::string");
但是加上以上代码之后,槽函数还是没有触发成功。
2.原因是该信号槽是跨线程执行,跨线程的信号槽是使用主线程中的消息循环实现的,而主线程中有个while循环一直在堵塞,导致消息主线程一直不能执行消息循环中的消息。
将主线程中的while循环放在线程中执行,槽函数成功触发。