如何通过Qt C++ GUI应用访问USB摄像头?有哪些相关参考示例?
Qt C++ 访问USB摄像头参考实现
Qt 多媒体模块原生支持所有符合UVC标准的USB免驱摄像头,你之前找到的webcam相关示例绝大多数都可以直接兼容USB摄像头,不需要额外适配。
本地可直接获取的参考示例
如果你安装Qt Creator时勾选了「示例」安装组件,直接在Qt Creator欢迎页的示例搜索栏输入camera,就能找到官方提供的可直接编译运行的示例,推荐两个最匹配的:
Camera Example:纯C++ Widget实现,包含摄像头预览、拍照、录像、设备切换的完整逻辑,启动后会自动枚举所有已连接的USB摄像头,可直接选择目标设备调用QML Camera Example:如果采用QML做界面可以参考这个,底层逻辑和C++版完全一致
最简实现代码片段
你也可以参考以下代码快速搭建最小可用的Demo:
- 首先在项目的
.pro配置文件中添加多媒体模块依赖:
QT += multimedia multimediawidgets
- 头文件核心声明:
#include <QMainWindow> #include <QCamera> #include <QCameraViewfinder> #include <QMediaDevices> #include <QMediaCaptureSession> QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); private: Ui::MainWindow *ui; QCamera *m_camera; QCameraViewfinder *m_viewfinder; QMediaCaptureSession *m_captureSession; };
- 主窗口初始化核心逻辑:
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); // 枚举所有已连接的摄像头设备 const auto availableCameras = QMediaDevices::videoInputs(); for (const auto &cameraInfo : availableCameras) { // 可根据设备名称选择指定的USB摄像头 qDebug() << "可用摄像头设备:" << cameraInfo.description(); } // 初始化组件 m_captureSession = new QMediaCaptureSession(this); // 这里可以传入上面枚举到的指定摄像头设备,默认使用系统默认摄像头 m_camera = new QCamera(QMediaDevices::defaultVideoInput(), this); m_viewfinder = new QCameraViewfinder(this); // 绑定会话和输出组件 m_captureSession->setCamera(m_camera); m_captureSession->setVideoOutput(m_viewfinder); // 将预览组件添加到布局中 ui->verticalLayout->addWidget(m_viewfinder); // 启动摄像头 m_camera->start(); } MainWindow::~MainWindow() { m_camera->stop(); delete ui; }
注意事项
- 以上代码基于Qt 6编写,如果使用Qt 5,接口存在细微差异:Qt 5没有
QMediaCaptureSession和QMediaDevices类,直接将QCamera和QCameraViewfinder绑定即可,核心逻辑完全一致 - 仅支持符合UVC标准的免驱USB摄像头,目前市面绝大多数消费级、工业级USB摄像头都符合该标准
- 如果代码枚举不到目标摄像头,先检查Windows设备管理器中摄像头是否正常识别,是否被其他应用占用
内容的提问来源于stack exchange,提问作者Emlinux
相关产品推荐
相关产品推荐

