Qt中有无线程的简单对比

新建基于widget的项目,UI中添加两个pushbutton,和一个textEdit

接下来编写槽函数

操作一:

void Widget::on_btn1_clicked()
{   static int count=0;
    for(int i=1;i<1000000000;i++)
        count+=i;
    ui->textEdit->setText(QString::number(count));
}

操作二:

void Widget::on_btn2_clicked()
{
    ui->textEdit->setText("Hello world!");
}

运行程序,点击操作一,

发现程序无响应,此时没有办法再进行操作,这是因为操作一所需要时间很长,而程序要等到它操作完成才能进行其他操作。

我们加入线程再试试看效果如何。

 

首先通过右键工程,加入基于c++类Thread,

类头文件Thread.h

#ifndef THREAD_H
#define THREAD_H
#include<QObject>
#include<QThread>

class Thread :public QThread{
    Q_OBJECT


public:
    Thread();

signals:
    void returnResult(int);

protected:
    void run();

};

#endif // THREAD_H

 

Thread.cpp

#include "Thread.h"


Thread::Thread()
{
        //
}
void Thread::run()
{
    int result = 0;
    for(int i = 0; i < 2000000000; i++)
        result += i;
    emit returnResult(result);  //将结果放在信号中
}

Widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QString>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    thread=new Thread();
    ui->setupUi(this);
    QObject::connect(thread,SIGNAL(returnResult(int)),this,SLOT(displayResult(int)));
}

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

void Widget::on_btn1_clicked()
{
    thread->start();
}

void Widget::on_btn2_clicked()
{
    ui->textEdit->setText("Hello world!");
}

void Widget::displayResult(int result)
{
    ui->textEdit->setText(QString::number(result));
}

 

运行程序、点击操作一,进入线程,点击操作二,显示文字,线程跑完就显示线程一的结果。再次过程中,操作一的线程并没有阻塞到操作二,这就是线程的简单使用。

 

另外,使用Thread的简单过程:添加C++类,手动修改定义,继承于QThread类,再在类的头文件重新声明run():

virtual void run();

再定义run,之后创建类的对象,使用start进行调用run();

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值