QT多线程Qthread

   1.回顾linux多线程
                pthread_create(   函数指针);  //通过函数指针,指明你这个线程需要完成的任务
                                              
   2.QT中多线程的使用
          原理:当你调用start方法开启一个线程的时候,run方法会被自动调用
          第一步:创建一个子类继承QThread,然后重写QThread中的run()方法
                                 virtual void QThread::run()  //虚函数,线程的任务函数,创建线程需要完成的任务就靠它来实现
                       如何在QT工程中新增一个C++类
                                 右键点击工程名--》add new--》选择C++--》C++类
          第二步:创建子类对象,启动线程
                          void QThread::start();  

   3.常用方法
          (1)延时
                 [static] void QThread::sleep(unsigned long secs)  //单位秒
                 [static] void QThread::msleep(unsigned long msecs)  //毫秒
                 [static] void QThread::usleep(unsigned long usecs)   //微秒
          (2)终止线程 
                 void QThread::terminate()
          (3)回收线程
                 bool QThread::wait(unsigned long time = ULONG_MAX)  //参数是超时时间



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

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

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

//启动线程
void MainWindow::on_pushButton_clicked()
{
    thread.start();
}
//关闭线程
void MainWindow::on_pushButton_2_clicked()
{
    thread.terminate();
}

-----------------------------
------------------------------
#include "mythread.h"
#include <QDebug>
mythread::mythread() : QThread()
{

}

void mythread::run()
{
    while(1)
    {
        qDebug()<<"hello ";
        QThread::sleep(1);
    }
}

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

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //把主界面中的标签当成参数传递给mythread这个类
    thread.getattr(ui->label);
}

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

//启动线程
void MainWindow::on_pushButton_clicked()
{
    thread.start();
}
//关闭线程
void MainWindow::on_pushButton_2_clicked()
{
    thread.terminate();
}
-----------------------------------------
--------------------------------------------
#include "mythread.h"
#include <QDebug>
mythread::mythread() : QThread()
{
    //把要显示的图片存放到容器中
    piclist.push_back("C:/Users/PC/Desktop/share/1.jpg");
    piclist.push_back("C:/Users/PC/Desktop/share/2.jpg");
    piclist.push_back("C:/Users/PC/Desktop/share/3.jpg");
    piclist.push_back("C:/Users/PC/Desktop/share/4.jpg");
    piclist.push_back("C:/Users/PC/Desktop/share/5.jpg");
    i=0;
}

void mythread::run()
{
    while(1)
    {
        QPixmap map(piclist.at(i));
        //调整图片大小
        map.scaled(mylb->width(),mylb->height());
        //配置生效
        mylb->setScaledContents(true);
        //每隔一秒钟在标签上切换显示不同的图片
        mylb->setPixmap(map);
        QThread::sleep(1);
        if(i<4)
            i++;
        else
            i=0;
    }
}

void mythread::getattr(QLabel *lb)
{
    mylb=lb;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hqb_newfarmer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值