qt创建线程类并实现通信 C++

需求描述:

通过VS创建了一个QT项目,我需要一个线程类去实时获取设备取流的图像,并将图像传给qt的类用于在QLabel上显示。

实现:

头文件:

复制代码
//include ...省略

//Qt界面的类Your_Project
class Your_Project : public QMainWindow
{
    Q_OBJECT

Public:
    //...省略...

public slots:
    void handleResults(cv::Mat Img);    //处理图像的函数

private slots:
    void start_test();    //点击对应按钮启动线程的槽函数

};

//创建一个线程类
class WorkerThread : public QThread
{
    Q_OBJECT

public:
    //将 Your_Project 类的实例作为参数传递给线程类
    WorkerThread(Your_Project * project) : m_project(project) {}

protected:
    void run();    //线程类中的run()函数获取我想要的Img,并传给handleResults(cv::Mat Img)

private:
    Your_Project * m_project;
};

.cpp文件:

复制代码
//--此部分可以放在一个按钮的槽函数中,点击按钮开启线程--//
void Your_Project::start_test()
{
    
    //实例化线程
    WorkerThread* workThread;
    workThread = new WorkerThread(this);
    workThread->start();//启动线程
}

void workThread::run()
{
    cv::Mat Img;
    //通过某种方式获得了Img后
    m_project->handleResults(Img);  //通过m_project将img传给Your_Project类的handleResults函数
}

void Your_Project::handleResults(cv::Mat Img)
{
    //获得线程类中run函数传来的Img,并进行其他处理,例如保存:
    cv::imwrite("img.jpg",Img);
}

在上述示例代码中,点击按钮触发槽函数start_test()后,开启线程调用run()函数,run()函数中通过m_project将得到的图像数据传给qt界面的Your_Project类的handleResults函数,实现了在UI界面上处理或者其它的处理方式。

相关推荐
撑伞的鱼993714 分钟前
C++开发用什么AI编程工具效果好?2026年实测横评(附选型指南)
开发语言·c++·ai编程·cursor
大数据张老师20 分钟前
Typora 导出 Word 模版操作手册
开发语言·c#·word·typora
略略略咯咯24 分钟前
stream流浅拷贝
开发语言·python
long31626 分钟前
Java 团队入门到精通学习资料
java·开发语言
城管不管38 分钟前
rabbitmq如何保证消息不丢失?解决方案又是什么?
开发语言·ai·面试·职场和发展·rabbitmq·php·agent
程序员良辰40 分钟前
【TongWeb7】启动接近两分钟问题排查
java·开发语言·中间件
深色風信子42 分钟前
Kotlin Bytedeco OpenCV 图像图像58 无缝克隆
开发语言·opencv·kotlin·bytedeco
朝阳391 小时前
react19【系列实用教程】实用组件封装
开发语言·前端·javascript
我是苏苏1 小时前
C#基础:使用System.Speech.Synthesis离线播放/朗读文字内容
开发语言·c#
j7~1 小时前
【Linux】二十八.线程篇五《Linux多线程编程:线程同步之条件变量》---详解
linux·运维·c++·学习·条件变量·线程同步