41.QT-多线程与界面之间交互总结

更新时间:2023-06-30 11:06:16 阅读: 评论:0

41.QT-多线程与界⾯之间交互总结
1. 线程与界⾯组件需要注意的地⽅
在QThread线程中不能直接创建QWidget之类的界⾯组件.
因为在QT中,所有界⾯组件相关的操作都必须在主线程中(也就是GUI thread)
所以, QThread线程不能直接操作界⾯组件.
2.QThread线程如何操作界⾯组件-⽅法1
将多线程类对象封装为GUI界⾯类的类成员
然后在⼦线程定义信号函数,通过信号槽机制,向界⾯组件emit发射信号,从⽽实现间接操作.
aol
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槽函数发送信息
the brainvoid Testtherd::run()
德语学习软件{
diogenes
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);zhuaxia
}
}
⽗界⾯类的paintMsg槽函数如下所⽰:
void loginwindow:: paintMsg(QString msg) {
this->LineHint->tText(msg);
英语转换汉语>empty怎么读}
运⾏效果如下:

本文发布于:2023-06-30 11:06:16,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/1070073.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:组件   线程   信号   操作   函数   验证   接收者   封装
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图