Qt中提供了线程类,默认窗口是主线程,这个时候如果我们的业务逻辑很费时,就会一直使用主线程,页面可能会卡顿甚至崩溃。那么将业务逻辑放入子线程,能够避免页面的卡顿,保证操作是流畅的,还能提高程序的执行效率。
自己在使用Qt多线程中遇到的问题记录一下,也许能解决你的问题:
- 不要将子线程中的函数,放入到主线程的函数内,嵌套使用;
主线程中的函数中嵌套了子线程中对象的函数,会因为顺序执行,导致主线程的函数会等到嵌套的子线程函数执行结束才能结束,实现不了想要的结果,页面仍然会卡顿。此时打印子线程中对象所在线程,显示是在主线程中。
- 信号与槽传参:只能使用const引用传递,或者值传递
- 引用传递:不行
- const 引用传递:可以
- 值传递:可以
- 信号与槽传参:默认传递Qt库类型参数,比如QString
- 传递string,会报错:
QObject::connect: Cannot queue arguments of type ‘string’
(Make sure ‘string’ is registered using qRegisterMetaType().)- 解决办法:可以在main中加入qRegisterMetaType(“string”); 这里以string为例,可以换成你所需要的类型。