QT使用相机拍照

文章目录

QT 使用相机拍照

在Qt中,使用相机拍照,可以使用QCameraQCameraImageCapture类。

以下是一个简单的例子,展示如何使用Qt的相机功能拍照:

首先,确保你的项目文件.pro包含相机模块:

c++ 复制代码
 QT       += core gui multimedia multimediawidgets

然后,在Qt应用程序中,创建 CameraWidget 类:

  • C++头文件 "camerawidget.h" 内容如下:
C++ 复制代码
#ifndef CAMERAWIDGET_H
#define CAMERAWIDGET_H

#include <QWidget>
#include <QCamera>
#include <QCameraViewfinder>
#include <QCameraImageCapture>
#include <QPushButton>
#include <QVBoxLayout>

class CameraWidget : public QWidget
{
    Q_OBJECT

public:
    CameraWidget(QWidget *parent = nullptr);
    ~CameraWidget();

public slots:
    void slotTakePhoto();
private:
    QCamera *camera;
    QCameraViewfinder *viewfinder;
    QCameraImageCapture *imageCapture;
    QPushButton *pushBtnTakePhoto;
};
#endif // CAMERAWIDGET_H
  • C++源文件 camerawidget.cpp 内容如下:
C++ 复制代码
#include "camerawidget.h"
#include <QCameraInfo>
#include <QFileDialog>

CameraWidget::CameraWidget(QWidget *parent)
    : QWidget(parent)
{
    viewfinder = new QCameraViewfinder(this);
    viewfinder->resize(800,600);
    pushBtnTakePhoto = new QPushButton(tr("拍照"));
 	connect(pushBtnTakePhoto,&QPushButton::clicked,this,&CameraWidget::slotTakePhoto);
        

    QVBoxLayout *layoutMain = new QVBoxLayout(this);
    layoutMain->addWidget(viewfinder);
    layoutMain->addWidget(pushBtnTakePhoto);
    
    camera = new QCamera(QCameraInfo::defaultCamera(),this);
    imageCapture = new QCameraImageCapture(camera);
    
    camera->setViewfinder(viewfinder);
    camera->start();

}

void CameraWidget::slotTakePhoto()
{
    camera->setCaptureMode(QCamera::CaptureStillImage);
    QString fileName = QFileDialog::getSaveFileName();
    camera->searchAndLock();
    imageCapture->capture(fileName);
    camera->unlock();
}

CameraWidget::~CameraWidget()
{
}
  • 主程序main.cpp 内容如下
C++ 复制代码
int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    CameraWidget cameraWidget;
    cameraWidget.show();
     
    return app.exec();
}

小结

​ 在这个例子中,我们创建了一个CameraWidget类,它包含一个QCamera对象和一个QCameraImageCapture对象。我们还有一个按钮用来触发拍照,当按钮被点击时,clicked信号被发射,slotTakePhoto 方法就会被调用来拍照,并保存到所选择的文件中。

​ 确保你的应用程序有适当的权限去访问相机硬件,这可能需要在某些操作系统上以管理员身份运行,或者处理相应的权限请求。

slotTakePhoto 方法就会被调用来拍照,并保存到所选择的文件中。

​ 确保你的应用程序有适当的权限去访问相机硬件,这可能需要在某些操作系统上以管理员身份运行,或者处理相应的权限请求。

​ 另外,例程中使用默认的 JPEG 图像格式存储拍照文件。

相关推荐
Zqrnja3 小时前
PTA 2026天体选拔赛(多校联赛)L2-1 仪式网络(C++ 含代码解释)
开发语言·c++
H Journey3 小时前
C++ 强制类型转换
c++·类型转换
‎ദ്ദിᵔ.˛.ᵔ₎3 小时前
map和set
c++
沐雪轻挽萤3 小时前
15. C++17新特性-std::string_view
java·开发语言·c++
小小码农Come on3 小时前
QML怎么使用C++多线程编程
开发语言·c++
沛沛rh454 小时前
用 Rust 实现用户态调试器:mini-debugger项目原理剖析与工程复盘
开发语言·c++·后端·架构·rust·系统架构
云栖梦泽4 小时前
Linux内核与驱动:13.从设备树到Platform平台总线
linux·运维·c++·嵌入式硬件
qeen874 小时前
【算法笔记】模拟与高精度加减乘除
c++·笔记·算法·高精度·模拟
txinyu的博客4 小时前
高并发内存池 - 简化版 tcmalloc
c++
少司府4 小时前
C++基础入门:内存管理
c语言·开发语言·c++·内存管理·delete·new·malloc