Qt多线程使用 和 信号与槽传参 需要注意的问题

Qt中提供了线程类,默认窗口是主线程,这个时候如果我们的业务逻辑很费时,就会一直使用主线程,页面可能会卡顿甚至崩溃。那么将业务逻辑放入子线程,能够避免页面的卡顿,保证操作是流畅的,还能提高程序的执行效率。

自己在使用Qt多线程中遇到的问题记录一下,也许能解决你的问题:

  1. 不要将子线程中的函数,放入到主线程的函数内,嵌套使用;

主线程中的函数中嵌套了子线程中对象的函数,会因为顺序执行,导致主线程的函数会等到嵌套的子线程函数执行结束才能结束,实现不了想要的结果,页面仍然会卡顿。此时打印子线程中对象所在线程,显示是在主线程中。

  1. 信号与槽传参:只能使用const引用传递,或者值传递
  • 引用传递:不行
  • const 引用传递:可以
  • 值传递:可以
  1. 信号与槽传参:默认传递Qt库类型参数,比如QString
  • 传递string,会报错:
    QObject::connect: Cannot queue arguments of type ‘string’
    (Make sure ‘string’ is registered using qRegisterMetaType().)
  • 解决办法:可以在main中加入qRegisterMetaType(“string”); 这里以string为例,可以换成你所需要的类型。
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值