跳至主要內容
Qt 中多线程间传递信号经验总结

有一个程序,都写了大半年了,之前定义的一套信号机制挺好用的,但改成多线程之后,发现根本不能触发了。

开始怀疑是线程忙等问题,还尝试加QApplication::processEvents()等手段,一无所获。

折腾一天之后,看了一眼调试控制台的输出信息,发现问题其实造给我明白输出在调试控制台里面了:

我在信号中传递了一个自定义类型的数据。在单线程模式下,这样的传递随意写。但是,如果要跨线程传递信号,信号的参数就必须是注册过的“Qt元类型”。否则,即使是一个简单的枚举量,也是不能跨线程传递的,这个问题在编译时没有警告。


魏大帅手黑大约 7 分钟编程C/C++Qt线程
Qt/CMake 下谜一般的 LNK2001 问题

今天第三次被这个问题坑了,不写不行。

问题很简单,就是你写了一个类,继承了Qt的某个类,有Q_OBJECT宏。

然后编译一点事都没有,链接的时候出问题了,死活都报LNK 2001错误,这时候你如果不仔细看错误信息去搜,一堆的让你加lib引用一类的信息,当然是没用。

仔细看错误信息,典型情况下是四个符号找不到,都是staticMetaObject一类一眼就能看出来是Qt内部函数的那种符号,但你的类里面命名不可能写这样的声明。想必是Qt引入的,但Qt为什么会只声明不实现?


魏大帅手黑大约 2 分钟编程C/C++Qt编译
使用 CMake/MSVC 时指定工具链版本

在命令行传递形如-T host=x64,version=14.32.17.2的命令行, 或者在首次执行Configure时, 在图形界面最下面的Optional Toolset文本框(那里标注了这是传递给-T)中填入形如host=x64,version=14.32.17.2的选项, 并且在下面的四个单选框中选中“specific native compilers”。

指定 Windows SDK 版本


魏大帅手黑大约 2 分钟编程C/C++CMakeninja编译跨平台