QT-多线程与界面之间交互总结
2023-09-14 09:07:01 时间
- 线程与界面组件需要注意的地方
在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;i<count;i++)
str.append('.'); //循环添加小数点
count=(count+1)%7;
QMetaObject::invokeMethod(this->parent(), "paintMsg",
Q_ARG(QString, str));
msleep(500);
}
}
父界面类的paintMsg槽函数如下所示:
void loginwindow:: paintMsg(QString msg) {
this->LineHint->setText(msg);
}
运行效果如下:
原文:https://www.cnblogs.com/lifexy/p/10907901.html
相关文章
- 树莓派基于QT实现利用USB转485模块进行串口通讯「建议收藏」
- QT从下载到安装的具体教程
- QT QStringList 用法
- Qt各类位置信息函数
- QT多线程实战_Qt多线程开发项目
- Qt截图软件3-实现矩形区域截图
- Qt官方示例-文本对象
- Linux Qt编程:一步一步开始(linuxqt入门)
- Linux系统使用Qt开发快速入门教程(linux下qt教程)
- 在Linux上使用Qt开发应用(qtonlinux)
- 使用 Qt 连接远程 MySQL 数据库(qt连接远程mysql)
- 建立Linux下QT动态库建立快速指南(linux下qt动态库)
- 在Linux系统上使用QT和GDB调试(qtlinuxgdb)
- Linux下Qt环境快速安装指南(linux下qt安装)
- 在Linux系统下利用Qt程序设计实现的精彩之旅(linux与qt程序设计)
- 在Linux上体验Qt的魅力(linux下运行qt)
- 利用Qt快速调用Linux程序简易指南(qt调用linux程序)
- Linux虚拟机中安装Qt的指南(linux虚拟机安装qt)
- Qt 静态编译在 Linux 的实践(qt静态编译linux)
- 开发linux下 Qt 图形界面开发实践(linux下qt图形界面)
- Qt连接Oracle数据库的驱动问题(qtoracle驱动)
- 集成开发Linux与Qt集成开发:实现无缝交互(linux与qt)
- 如何在Linux上使用Qt编程:头文件的重要性(qtlinux头文件)
- 配置Linux的QT环境变量,轻松打造高效开发环境(qt环境变量linux)
- Qt在Linux操作系统中的运行和应用(qt运行linux)
- QT在ARM架构下的Linux开发(qtlinuxarm)
- QT开发MSSQL数据库技术实现(qt mssql)
- 使用Qt快速搭建MySQL数据库连接(qtmysql连接)