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 图像格式存储拍照文件。

相关推荐
羊小猪~~1 小时前
数据结构C语言描述2(图文结合)--有头单链表,无头单链表(两种方法),链表反转、有序链表构建、排序等操作,考研可看
c语言·数据结构·c++·考研·算法·链表·visual studio
苏三有春1 小时前
PyQt5实战——UTF-8编码器功能的实现(六)
开发语言·qt
脉牛杂德2 小时前
多项式加法——C语言
数据结构·c++·算法
legend_jz2 小时前
STL--哈希
c++·算法·哈希算法
CSUC2 小时前
【C++】父类参数有默认值时子类构造函数列表中可以省略该参数
c++
Vanranrr2 小时前
C++ QT
java·c++·qt
鸿儒5172 小时前
C++ lambda 匿名函数
开发语言·c++
兆。2 小时前
掌握 PyQt5:从零开始的桌面应用开发
开发语言·爬虫·python·qt
van叶~3 小时前
算法妙妙屋-------1.递归的深邃回响:二叉树的奇妙剪枝
c++·算法
knighthood20013 小时前
解决:ros进行gazebo仿真,rviz没有显示传感器数据
c++·ubuntu·ros