Qt6中使用QtConcurrent调用类成员函数编译报错如何解决
问题原因
你使用的是Qt 6版本,而参考的是Qt 5阶段的QtConcurrent::run调用类成员函数的语法,Qt 6对该API做了不兼容的参数顺序调整:
- Qt 5语法:
QtConcurrent::run(对象指针, 成员函数指针, 可选参数...) - Qt 6语法:
QtConcurrent::run(成员函数指针, 对象指针, 可选参数...)
你按Qt5语法传参,导致模板参数匹配错误,出现了对应的编译报错。
解决方法
- 修改
on_pushButton_clicked槽函数里的调用代码,调整参数顺序即可:
// 把成员函数指针放在第一个参数,对象指针放在第二个参数 QtConcurrent::run(&TestClass::start, &this->testClass);
- 确保你的项目配置中已经添加了Concurrent模块:
- 若使用qmake构建,在.pro文件中添加:
QT += concurrent
- 若使用CMake构建,在CMakeLists.txt中添加对应的依赖:
find_package(Qt6 REQUIRED COMPONENTS Concurrent) target_link_libraries(你的项目目标名 PRIVATE Qt6::Concurrent)
另外你MainWindow构造函数里声明的局部变量TestClass testClass;是多余代码,和你声明的类成员变量testClass没有关系,建议删除避免混淆。
内容的提问来源于stack exchange,提问作者Yata
相关产品推荐
相关产品推荐

