欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 资讯 > Qt 学习第 天:线程与多线程

Qt 学习第 天:线程与多线程

2024/10/25 12:32:10 来源:https://blog.csdn.net/CH3CH2CH4/article/details/143221561  浏览:    关键词:Qt 学习第 天:线程与多线程

1024程序员快乐,如果这博客让你学习到了知识,请给我一个免费的赞❤️

一、创建界面文件

LCDnumber

二、创建mythread类,继承QObject

三、在MyThread.h文件做修改,并且加上函数声明

引入头文件,改变继承

#ifndef MYTHREAD_H
#define MYTHREAD_H#include <QThread>class MyThread : public QThread
{Q_OBJECT
public:explicit MyThread(QObject *parent = 0);protected:void run(); // 入口函数 -- 需要start()启动signals:void sigDone();public slots:
};#endif // MYTHREAD_H

四、实现run方法

#include "mythread.h"MyThread::MyThread(QObject *parent) : QThread(parent)
{}void MyThread::run()
{// 模拟复杂的操作sleep(5); //休眠5semit sigDone();
}

五、使用计时器来控制LCDnumber

//计时器mytimer = new QTimer(this);myt = new MyThread(this);connect(mytimer, &QTimer::timeout, this, [=](){static int num = 0;ui->lcdNumber->display(num++);});

六、实现按钮的槽函数

void MyWidget::on_begin_clicked()
{//如果计时器开着if(mytimer->isActive() == true){return;}// 启动定时器mytimer->start(1000); // ms// 启动子线程myt->start();
}

子线程运行结束后,停止计数器

// 子线程信号,子线程运行结束停止计数器
    connect(myt, &MyThread::finished, mytimer, &QTimer::stop); 

完整代码

mythread.cpp

#include "mythread.h"MyThread::MyThread(QObject *parent) : QThread(parent)
{}void MyThread::run()
{// 模拟复杂的操作sleep(5); //休眠5semit sigDone();
}

mythread.h

#ifndef MYTHREAD_H
#define MYTHREAD_H#include <QThread>class MyThread : public QThread
{Q_OBJECT
public:explicit MyThread(QObject *parent = 0);protected:void run(); // 入口函数 -- 需要start()启动signals:void sigDone();public slots:
};#endif // MYTHREAD_H

mywidget.cpp

#include "mywidget.h"
#include "ui_mywidget.h"
#include <QThread>
#include <QDebug>MyWidget::MyWidget(QWidget *parent) :QWidget(parent),ui(new Ui::MyWidget)
{ui->setupUi(this);//计时器mytimer = new QTimer(this);myt = new MyThread(this);connect(mytimer, &QTimer::timeout, this, [=](){static int num = 0;ui->lcdNumber->display(num++);});// 子线程信号,子线程运行结束停止计数器connect(myt, &MyThread::finished, mytimer, &QTimer::stop);}MyWidget::~MyWidget()
{delete ui;
}void MyWidget::on_begin_clicked()
{//如果计时器开着if(mytimer->isActive() == true){return;}// 启动定时器mytimer->start(1000); // ms// 启动子线程myt->start();
}

mywidget.h

#ifndef MYWIDGET_H
#define MYWIDGET_H#include <QWidget>
#include <QTimer>
#include "mythread.h"namespace Ui {
class MyWidget;
}class MyWidget : public QWidget
{Q_OBJECTpublic:explicit MyWidget(QWidget *parent = 0);~MyWidget();private slots:void on_begin_clicked();private:Ui::MyWidget *ui;QTimer* mytimer;MyThread *myt;
};#endif // MYWIDGET_H

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com