
41.QT-多线程与界面之间交互总结
发布日期:2021-05-09 04:34:25
浏览次数:11
分类:博客文章
本文共 1130 字,大约阅读时间需要 3 分钟。
1. 线程与界面组件需要注意的地方
- 在QThread线程中不能直接创建QWidget之类的界面组件.
- 因为在QT中,所有界面组件相关的操作都必须在主线程中(也就是GUI thread)
- 所以, QThread线程不能直接操作界面组件.
2.QThread线程如何操作界面组件-方法1
- 将多线程类对象封装为GUI界面类的类成员
- 然后在子线程定义信号函数,通过信号槽机制,向界面组件emit发射信号,从而实现间接操作.
3.QThread线程如何操作界面组件-方法2
- 使用QApplication::postEvent()实现向界面发送事件,从而能够封装一个自定义类
4.使用Invokes()函数来调用界面组件的信号槽-方法3
一般使用该函数(用来调用对方的私有信号或槽):
该函数的连接方式默认使用的是Qt::AutoConnection
- 表示如果接收者和发送者在同一个线程,则自动使用Qt::DirectConnection类型。如果接收者和发送者不在一个线程,则自动使用Qt::QueuedConnection类型。
比如,当我们想调用一个obj下的compute(QString, int, double)槽函数时:
则只需要写入:
QMetaObject::invokeMethod(obj, "compute", Q_ARG(QString, "sqrt"), Q_ARG(int, 42), Q_ARG(double, 9.7));
示例如下所示:
在Testtherd线程类里通过invokeMethod向父界面类的paintMsg槽函数发送信息
void Testtherd::run(){ int count=0; while(1) { QString str="请稍等,正在验证用户,登录中"; for(int i =0;iparent(), "paintMsg", Q_ARG(QString, str)); msleep(500); }}
父界面类的paintMsg槽函数如下所示:
void loginwindow:: paintMsg(QString msg) {this->LineHint->setText(msg);}
运行效果如下:
发表评论
最新留言
很好
[***.229.124.182]2025年03月22日 09时35分49秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Laravel - 上手实现 - 文件上传、保存到 public 目录下
2021-05-09
一次性搞懂 PHP 中面向对象的所有知识点。
2021-05-09
将mongo设置为windows的服务
2021-05-09
Linux 修改环境变量报错
2021-05-09
MYSQL 面试中 查询系列 常考问题
2021-05-09
【Flink】Flink 底层RPC框架分析
2021-05-09
【字符编码】字符编码 && Base64编码算法
2021-05-09
【集合框架】JDK1.8源码分析之LinkedList(七)
2021-05-09
【设计模式】策略模式
2021-05-09
【设计模式】命令模式
2021-05-09
Jenkins 集成postman 自动化运行接口测试用例
2021-05-09
异步多线程处理
2021-05-09
hashlib 简单加密
2021-05-09
python装饰器实现对异常代码出现进行监控
2021-05-09
轮评审用例,写用例的重要性-----(python单元测试反思)
2021-05-09
dubbo 接口初入门
2021-05-09
django+appium实现UI自动化测试平台(开源部分,可定制开发)
2021-05-09
PAT 1008. Elevator (20)
2021-05-09
zzuli 1815: easy problem 打表
2021-05-09
天梯赛 L2-020. 功夫传人 BFS
2021-05-09