QT 线程的使用

本文介绍了如何在C++中使用Qt库创建一个异步线程(QThread),通过回调函数处理任务,并通过事件循环实现非阻塞操作,控制开始/停止任务的用户界面交互。
摘要由CSDN通过智能技术生成

1.头文件: 

#include<QThread> 

2.在.h文件中定义全局:
QThread* threadTraj;
 void threadTrajProcess();//回调函数

3.在.cpp文件中:

threadTraj = new QThread();//初始化

//连接槽函数

QObject::connect(threadTraj, &QThread::started, this, MainForm::threadTrajProcess);

4.线程处理

void MainForm::threadTrajProcess()
{
    while(startTask)
    {
        cameraTraj->g_disply_fps++;
        if(!qImageForTraj.isNull())//开始任务
        {
            UsePythonFindTrack();
        }
        //QThread::msleep(10);//会阻塞线程,会影响到用户界面的响应性。
        QEventLoop loop;//非阻塞延时
        QTimer::singleShot(10, &loop, SLOT(quit())); // 等待0.01秒后退出循环
        loop.exec(); // 进入事件循环等待
    }
}

5。按键 开始/停止 任务
void MainForm::on_btnStartWork_clicked()
{

     if(startTask==false)//开始
     {                
        ui->btnStartWork->setText("结束任务");
        ui->btnStartWork->setStyleSheet(ui->btnStartWork->styleSheet()+ "QToolButton{ color: red;}");     //修改按键颜色
        startTask=true;
        threadTraj->start(); // 启动线程
     }
     else
     {
        ui->btnStartWork->setText("开始任务");
       ui->btnStartWork->setStyleSheet(ui->btnStartWork->styleSheet()+ "QToolButton{color: blue;}");
        startTask=false;
        threadTraj->quit();
         UseGetTrackGoal();
     }
}

6.销毁
//关闭
void MainForm::on_btnMenu_Close_clicked()
{
    if(startTask)
    {
        startTask=false;
        threadTraj->quit();
    }
    close();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

chilian12321

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

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

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

打赏作者

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

抵扣说明:

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

余额充值