当前位置:   article > 正文

Qt子线程控制主界面UI控件_qt子线程操作ui

qt子线程操作ui

在子线程里控制主界面的UI控件有两种方法:第一种是在子线程中发送信号,然后在主线程中去更新;第二种方法是在子线程中创建同样的对象,然后把主界面中控件的指针赋给创建的对象。

第一种方法在此不做实例展示,在此通过一个简单的例子展示第二种方法:

下面是主界面的初始转态:

 

下面这个是继承自QThread类的子线程类

​​sonthread.h​​

  1. #ifndef SONTHREAD_H
  2. #define SONTHREAD_H
  3. #include <QLabel>
  4. #include <QThread>
  5. #include <QDebug>
  6. class sonThread : public QThread
  7. {
  8. Q_OBJECT
  9. public:
  10. explicit sonThread(QObject *parent = nullptr);
  11. void run();
  12. public:
  13. QLabel *label;
  14. };
  15. #endif // SONTHREAD_H

​​sonthread.cpp​​

  1. #include "sonthread.h"
  2. sonThread::sonThread(QObject *parent) : QThread(parent)
  3. {
  4. label = new QLabel;
  5. }
  6. void sonThread::run()
  7. {
  8. qDebug()<<"run()"<<QThread::currentThreadId();
  9. label->setText("更新");
  10. }

下面是主线程类

​​​dialog.h​​

  1. #ifndef DIALOG_H
  2. #define DIALOG_H
  3. #include <QDialog>
  4. #include <QThread>
  5. #include "sonthread.h"
  6. namespace Ui {
  7. class Dialog;
  8. }
  9. class Dialog : public QDialog
  10. {
  11. Q_OBJECT
  12. public:
  13. explicit Dialog(QWidget *parent = 0);
  14. ~Dialog();
  15. private:
  16. Ui::Dialog *ui;
  17. };
  18. #endif // DIALOG_H

​dialog.cpp​​

  1. #include "dialog.h"
  2. #include "ui_dialog.h"
  3. Dialog::Dialog(QWidget *parent) :
  4. QDialog(parent),
  5. ui(new Ui::Dialog)
  6. {
  7. ui->setupUi(this);
  8. sonThread *sonthread = new sonThread; //创建子线程对象
  9. sonthread->label=ui->label; //将主界面UI指针赋给子线程中的指针对象
  10. sonthread->start(); //启动子线程
  11. qDebug()<<"Dialog()"<<QThread::currentThreadId();
  12. }
  13. Dialog::~Dialog()
  14. {
  15. delete ui;
  16. }

下面是运行结果:

 

可以看出run()函数与主线程不在同一个线程,而我只在run()中有修改过label的字符,所以实现了在子线程中操作主界面UI控件的目的。

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/730757
推荐阅读
相关标签
  

闽ICP备14008679号