当一个事件需要很长的处理时间,就创建一个工作线程,防止主界面卡死。

1.新建一个QT的gui项目,里面包含main.cpp,mainwindow.h,mainwindow.cpp,mainwindow.ui文件

2.新建一个头文件thread.h,派生一个线程类,重新写一个线程的入口函数。

#ifndef THREAD_H
#define THREAD_H
class MyThread:public QThread
{
    Q_OBJECT
public:
    MyThread(QObject *parent);

void run();//线程入口函数(工作线程的主函数) } #endif // THREAD_H

3.新建thread.cpp,定义run()函数

#include"thread.h"
#include<sstream>
#include<iostream>
using namespace std;
MyThread::MyThread(QObject *parent)
    :QThread(parent)
{
}
MyThread::~MyThread()
{

}void MyThread::run()
{
    cout<<"开始执行线程"<<endl;
    QThread::msleep(10000);
    cout<<"线程执行完毕"<<endl;
}

4.在mainwindow.h中导入thread.h文件,并声明线程

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include"thread.h"

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    MyThread *task;//声明线程
};

#endif // MAINWINDOW_H

4.在mainwindow.cpp文件的构造函数中实例化线程并启动线程。

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "thread.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    task=new MyThread(NULL);
    task->start();
}

MainWindow::~MainWindow()
{
    delete ui;
}

结果:

 

posted on 2018-11-01 15:09  未完代码  阅读(6342)  评论(2编辑  收藏  举报