婚纱照展示网站源码,ps网页设计说明书,hfs网络文件服务器可以做网站,新手建设网站步骤0. 写在前面 一个应用程序一般只有一个线程#xff0c;一个线程内的操作是顺序执行的#xff0c;如果有某个比较耗时间的计算或操作#xff0c;比如图像处理大数据图像、网络通信中的文件传输#xff1b;在一个线程内操作时#xff0c;用户界面就能冻结而不能及时响应。这…0. 写在前面 一个应用程序一般只有一个线程一个线程内的操作是顺序执行的如果有某个比较耗时间的计算或操作比如图像处理大数据图像、网络通信中的文件传输在一个线程内操作时用户界面就能冻结而不能及时响应。这种情况下可以创建一个单独的线程来执行比较消耗时间的操作并与主线程之间处理好同步与数据交互这时候就是多线程的应用程序了。
1. 利用QThread类创建 1自定义一个类继承于QThread
class MyThread:public QThread
{public:void run();//线程处理函数和主函数不是同一个线程}void run()
{QThread::sleep(5);emit isDone();
} 在Qt文件中新添加MyThread类基类选择QObject随后修改三处地方 1将#includeQObject修改为#includeQThread; 2将MyThread类中class MyThread : public QObject修改为class MyThread : public QThread 3将MyThread.cpp函数中MyThread::MyThread(QObject *parent) : QObject(parent)修改为MyThread::MyThread(QObject *parent) : QThread(parent)。
### myThread.h ####ifndef MYTHREAD_H
#define MYTHREAD_H#include QThread
#include QTimer
#include QDebugclass MyThread : public QThread
{Q_OBJECT
public:explicit MyThread(QObject *parent nullptr);protected://QThread的虚函数//线程处理函数//不能直接调用通过start()间接调用void run();signals:void isDone();public slots:
};#endif // MYTHREAD_H### widget.h ###
#ifndef WIDGET_H
#define WIDGET_H#include QWidget
#include mythread.hnamespace Ui {
class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent 0);~Widget();private slots:void on_pBtn_start_clicked();void dealDone(); //定时器槽函数void dealTimeout(); //现成结束槽函数void stopThread(); //停止线程槽函数private:Ui::Widget *ui;QTimer* timer1;MyThread* thread; // 线程对象
};#endif // WIDGET_H### mythread.cpp ###
#include mythread.hMyThread::MyThread(QObject *parent) : QThread(parent)
{}void MyThread::run()
{//复杂数据处理需要耗时5ssleep(5);emit isDone();}### widget.cpp ###
#include widget.h
#include ui_widget.hWidget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui-setupUi(this);timer1 new QTimer();connect(timer1,QTimer::timeout,this,Widget::dealTimeout);//分配空间thread new MyThread(this);connect(thread,MyThread::isDone,this,Widget::dealDone);//当按窗口右上角关闭窗口时窗口触发destroyedconnect(this,Widget::destroyed,this,Widget::stopThread);
}Widget::~Widget()
{delete ui;
}void Widget::on_pBtn_start_clicked()
{if(timer1-isActive() false){//启动定时器timer1-start(100);}
// QThread::sleep(5);// //处理完之后关闭定时器
// timer1-stop();
// qDebug() Over!;//启动线程thread-start();}void Widget::dealDone()
{qDebug() It is Over!;timer1-stop();//关闭定时器}void Widget::dealTimeout()
{static int i 0;i;ui-lcdNumber-display(i);}void Widget::stopThread()
{thread-quit();thread-wait();}