C/C++知识点之QT-多线程与界面之间交互总结
从安 2019-06-21 来源 : 阅读 2841 评论 0

摘要:本篇文章主要讲述C/C++知识点之QT-多线程与界面之间交互总结,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。

本篇文章主要讲述C/C++知识点之QT-多线程与界面之间交互总结,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。

C/C++知识点之QT-多线程与界面之间交互总结

1.线程与界面组件需要注意的地方

在QThread线程中不能直接创建QWidget之类的界面组件.

因为在QT中,所有界面组件相关的操作都必须在主线程中(也就是GUI thread)

所以, QThread线程不能直接操作界面组件.


2.QThread线程如何操作界面组件-方法1

将多线程类对象封装为GUI界面类的类成员

然后在子线程定义信号函数,通过信号槽机制,向界面组件emit发射信号,从而实现间接操作.

 

3.QThread线程如何操作界面组件-方法2

使用QApplication::postEvent()实现向界面发送事件,从而能够封装一个自定义类

 

4.使用Invokes()函数来调用界面组件的信号槽-方法3

一般使用该函数(用来调用对方的私有信号或槽):

 

C/C++知识点之QT-多线程与界面之间交互总结

该函数的连接方式默认使用的是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);

}


本文由职坐标整理发布,学习更多的相关知识,请关注职坐标IT知识库!

本文由 @从安 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程