当前位置: 首页 > wzjs >正文

网站做apk制作工具广告公司简介怎么写

网站做apk制作工具,广告公司简介怎么写,微网站建设一般多少钱,做母婴产品哪个网站做的好处Qt中在子线程中刷新UI的方法 在Qt中UI界面并不是线程安全的,意味着在子线程中不能随意操作UI界面组件(比如按钮、标签)等,如果强行操作这些组件有可能会导致程序崩溃。那么在Qt中如何在子线程中刷新UI控件呢? 两种方…

Qt中在子线程中刷新UI的方法

在Qt中UI界面并不是线程安全的,意味着在子线程中不能随意操作UI界面组件(比如按钮、标签)等,如果强行操作这些组件有可能会导致程序崩溃。那么在Qt中如何在子线程中刷新UI控件呢?

两种方法:

方法一:使用信号槽机制。

第一步:创建一个QWidget项目,并且在其中添加一个继承自QThread的子线程类QWorkThread,如下:

#ifndef QWORKTHREAD_H
#define QWORKTHREAD_H#include <QObject>
#include<QThread>class QWorkThread : public QThread
{Q_OBJECT
public:explicit QWorkThread(QThread *parent = nullptr);QWorkThread(QWidget* pWidget,QThread *parent = nullptr);QWidget* m_pWidget = nullptr;protected:virtual void run() override;signals:void UpdateUI(QString strInfo);
};#endif // QWORKTHREAD_H

说明:

1.自定义一个信号UpdateUI用来刷新主线程UI。

2.重写run函数,使用emit 发射UpdateUI信号如下:

void QWorkThread::run()
{emit UpdateUI("刷新控件");
}

第二步:在MainWindow中定义一个槽函数,用来响应UpdateUI信号:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();public slots:void UpdateWidgetUI(QString strInfo);private:Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

第三步:调用connect连接UpdateUI信号和UpdateWidgetUI槽函数,刷新UI:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "qworkthread.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);QWorkThread* pThread = new QWorkThread(ui->label);connect(pThread,&QWorkThread::UpdateUI,this,&MainWindow::UpdateWidgetUI);connect(pThread,&QThread::finished, pThread, &QThread::deleteLater);pThread->start();
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::UpdateWidgetUI(QString strInfo)
{ui->label->setText(strInfo);
}

程序运行前后结果:

微信截图_20250510231328

微信截图_20250510231328

方法二:使用invokeMethod()方法。

第一步:增加一个带QWidget的构造函数,并且在QWorkThread定义一个QWidget 类型的变量用来保存要刷新的控件。如上QWorkThread头文件中。

第二步:修改QWorkThread::run方法如下:

void QWorkThread::run()
{if(m_pWidget != nullptr)QMetaObject::invokeMethod(m_pWidget,"setText",Qt::QueuedConnection,Q_ARG(QString,"刷新控件2"));
}

其中调用QMetaObject::invokeMethod方法。

程序运行结果如下:

微信截图_20250510232257

虽然Qt不允许子线程直接操作UI界面,但通过信号与槽机制或invokeMethod()方法,子线程和UI线程可以安全地进行交互。这些机制确保了多线程程序的稳定性,避免了UI更新时可能出现的线程安全问题。

参考文章:Qt/C++面试【速通笔记五】—子线程与GUI线程安全交互


文章转载自:

http://swvZJqlm.ryztL.cn
http://NAAWbsFt.ryztL.cn
http://jhJuXTwT.ryztL.cn
http://1vzQUR39.ryztL.cn
http://XFxQf6e3.ryztL.cn
http://lO9n1APS.ryztL.cn
http://8S2LfXl4.ryztL.cn
http://i8TGuktW.ryztL.cn
http://txQf5ShN.ryztL.cn
http://8LxSi1JX.ryztL.cn
http://Sp3wYp6Q.ryztL.cn
http://xmXrVUx1.ryztL.cn
http://DOnSt5lS.ryztL.cn
http://IHMI2Tw7.ryztL.cn
http://mHm9JFe1.ryztL.cn
http://sJRzUUet.ryztL.cn
http://M60P1KnC.ryztL.cn
http://h8wjPdjS.ryztL.cn
http://fvngeOSi.ryztL.cn
http://L2JxTAcs.ryztL.cn
http://PKRET7DT.ryztL.cn
http://9BRwmRme.ryztL.cn
http://0WtDayMO.ryztL.cn
http://dq8l1lN8.ryztL.cn
http://RoK40BfL.ryztL.cn
http://cWc4VUfP.ryztL.cn
http://IvyURg7c.ryztL.cn
http://Q46bowA6.ryztL.cn
http://mNnYsLk5.ryztL.cn
http://5dWI09EV.ryztL.cn
http://www.dtcms.com/wzjs/622474.html

相关文章:

  • 偷dede网站模板wordpress怎么找模板
  • 专业做二手房装修网站公司企业网站模板下载
  • 做软装的网站定西市网站建设咨询
  • 西安网站seo厂家广西城乡建设部网站
  • 沈阳论坛建站模板网站开发总监
  • 申请一个域名可以做多少网站在网站里面如何做支付工具
  • 国外优惠卷网站如何做公司主页的网站格式
  • 没有版权可以做视频网站吗安全生产规章制度建筑公司网站
  • 男女激烈做羞羞事网站网站韩剧重庆注册公司流程和费用标准
  • 域名注册网站建设网络实名wordpress分类文章获取
  • 云南制作网站的公司提供零基础网站建设教学
  • sns社交网站建设帮别人做网站赚钱
  • 查找北京国互网网站建设惠州手机模板建站
  • 网站的站点地图怎么做简述企业网站建设的主要步骤
  • 拜博网站建设logo在线设计软件
  • 景德镇建设局网站科技型中小企业服务网
  • 网站建设开票项目选什么开发一个视频app需要多少钱
  • 汕尾建设局安检站网站个人可以做哪些有意思的网站
  • 怎么申请建立个人免费网站公司查名
  • 大学生网站开发目的php将数据库导入wordpress
  • 分类信息网站如何建设镇江营销型建站公叿
  • 做企业网站需要注意什么厦门网站建设 金猪
  • 做网站 不是计算机专业微信商城公众号
  • 建设局工程网站asp网站仿制
  • 旅行社网站程序网站建设方案哪家好 推荐
  • 网站未来发展规划软件开发的三种基本方法
  • 哪里可以在百度做网站wordpress主题代码
  • 做网站的公司利润率是多少邢台网站建设哪儿好
  • 网站建设一龙条东莞网站推广哪些
  • 网站做分享链接深圳福田区有哪些企业