QT_Demo(1)之实现多线程实现简单的电脑摄像头视频流开关

QT_Demo(1)之实现多线程实现简单的电脑摄像头视频流开关

  • 使用qt中的多线程进行功能控制:继承QThread
  • 直接通过代码进行UI搭建
  • 简单示例使用信号与槽

1. 功能介绍

  • 首先想搭一个界面可以交互,从而实现手动开关笔记本摄像头的目的

  • 想通过多线程进行功能实现,从而提升稳定性和运行速度

  • 基础界面设置为QWidget,图像通过QLabel 显示

  • 界面一览:
    在这里插入图片描述

  • 创建项目

    • 我用的是VS中的qt插件 qt tools 来进行界面开发,如果没有在扩展->管理扩展->联网下载即可
    • 下方给出了两种工程种类,1是一个全空的qt 工程,2比1多了个UI文件,并在创建项目的时候可以选择UI文件的基类,在此我选择2进行开发吧
    • 工程2自带了UI文件,我目前对纯代码界面开发还不太熟练,稍微复杂的话还是直接通过QDesigner打开UI文件直接进行拉控件搭界面简单易行一些
      在这里插入图片描述
  • 基类可以在QMainWindow 、QWidget、QDialog中选择,这里随便选一个,先进入工程
    在这里插入图片描述

  • 选择完成后工程文件列表如下:
    在这里插入图片描述

2. 代码实现

  • 本文中主要通过纯代码进行UI搭建

  • 本次使用了opencv,需要在项目属性中配置opencv

  • 右键项目添加新建项 -> 添加类
    在这里插入图片描述

  • 代码如下:

  • VideoDisplayWidget.h

#include <QApplication>
#include <QWidget>
#include <QImage>
#include <QLabel>
#include <QPushButton>
#include <QVBoxLayout>
#include <QThread>
#include <opencv2/opencv.hpp>

#include <QPainter>
#include <QMouseEvent>
#include <QWheelEvent>

// 视频采集线程
class VideoCaptureThread : public QThread
{
   
   
    Q_OBJECT
public:
    VideoCaptureThread(QObject* parent = nullptr);
    ~VideoCaptureThread();

    void startCapture();

    void stopCapture();

    void run() override;


public:
    cv::VideoCapture cap;

signals:
    void newFrame(const QImage& frame); // 向主线程发送新帧

private:
    bool running;
};

// 主窗口类
class VideoDisplayWidget : public QWidget
{
   
   
    Q_OBJECT
public:
    VideoDisplayWidget(QWidget* parent = nullptr);

    ~VideoDisplayWidget();

public slots:
    void onNewFrame(const QImage& frame);

    // 启动视频采集线程
    void startCapture();

    // 停止视频采集线程
    void stopCapture();

private:
    QLabel* label;
    VideoCaptureThread* captureThread;

};

  • VideoDisplayWidget.cpp
#include"VideoDisplayWidget.h"

// 视频采集线程
VideoCaptureThread::VideoCaptureThread(QObject* parent) : QThread(parent), running(false) {
   
   }
VideoCaptureThread::~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

明月醉窗台

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

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

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

打赏作者

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

抵扣说明:

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

余额充值