QT 线程的使用

发布于:2024-04-10 ⋅ 阅读:(130) ⋅ 点赞:(0)

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();
}