有一个程序,都写了大半年了,之前定义的一套信号机制挺好用的,但改成多线程之后,发现根本不能触发了。
开始怀疑是线程忙等问题,还尝试加QApplication::processEvents()
等手段,一无所获。
折腾一天之后,看了一眼调试控制台的输出信息,发现问题其实造给我明白输出在调试控制台里面了:
我在信号中传递了一个自定义类型的数据。在单线程模式下,这样的传递随意写。但是,如果要跨线程传递信号,信号的参数就必须是注册过的“Qt元类型”。否则,即使是一个简单的枚举量,也是不能跨线程传递的,这个问题在编译时没有警告。