赞
踩
主界面为显示框,两个下拉框,一个是所有相机,一个是相机支持的分辨率
系统根据UI界面自动生成的部分不再描述,以下为其他部分源码
widget.h
- #include <QWidget>
- #include <QMouseEvent>
- class QCamera;
- class QCameraViewfinder;
- class QCameraImageCapture;
- class QCameraInfo;
- class QCameraViewfinderSettings;
-
- namespace Ui {
- class Widget;
- }
-
- class Widget : public QWidget
- {
- Q_OBJECT
-
- public:
- explicit Widget(QWidget *parent = 0);
- ~Widget();
-
- private:
- Ui::Widget *ui;
-
- QCamera *camera; //相机
- QCameraViewfinder *viewfinder; //取景器
- QList<QCameraInfo> cameras; //相机列表
- QList<QSize> mResSize = {}; //分辨率列表
- };
main.cpp
- #include "widget.h"
- #include <QApplication>
-
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
- Widget w;
- w.show();
-
- return a.exec();
- }
widget.cpp
- #include "widget.h"
- #include "ui_widget.h"
- #include <QCamera>
- #include <QCameraInfo>
- #include <QCameraViewfinder>
- #include <QCameraImageCapture>
- #include <QList>
- #include <QFileDialog>
- #include <QDebug>
-
- Widget::Widget(QWidget *parent) :
- QWidget(parent),
- ui(new Ui::Widget)
- {
- ui->setupUi(this);
-
- cameras = QCameraInfo::availableCameras();
- if(cameras.count() > 0) {
- camera = new QCamera(cameras.at(0));
- }
- viewfinder = new QCameraViewfinder(this);
- camera->setViewfinder(viewfinder);
- viewfinder->resize(600, 350);
- camera->start();
-
- //添加初始化的相机选项
- for(const QCameraInfo &cameraInfo:cameras) {
- ui->comboBox_cam->addItem(cameraInfo.description());
- }
- ui->comboBox_cam->setCurrentIndex(0);
-
- //添加初始化相机的分辨率选项
- mResSize = camera->supportedViewfinderResolutions();
- for (const QSize &msize:mResSize) {
- ui->comboBox_format->addItem(QString::number(msize.width(), 10) + "*" + QString::number(msize.height(), 10));
- }
- ui->comboBox_format->setCurrentIndex(0);
- QCameraViewfinderSettings init;
- init.setResolution(mResSize[0]);
- camera->setViewfinderSettings(init);
-
- connect(ui->comboBox_cam,QOverload<int>::of(&QComboBox::activated),[=](int index){
- camera->stop();
- delete camera;
- camera=new QCamera(cameras[index]);
- camera->setViewfinder(viewfinder); //设置取景器
- camera->start();
-
- //删除前相机的所有分辨率内容
- for (int i = 0; i < mResSize.size(); i++) {
- ui->comboBox_format->removeItem(0);
- }
- mResSize.clear();
- mResSize = camera->supportedViewfinderResolutions();
- for (const QSize &msize:mResSize) {
- ui->comboBox_format->addItem(QString::number(msize.width(), 10) + "*" + QString::number(msize.height(), 10));
- }
- ui->comboBox_format->setCurrentIndex(0);
- QCameraViewfinderSettings reset;
- reset.setResolution(mResSize[0]);
- camera->setViewfinderSettings(reset);
- });
-
- connect(ui->comboBox_format, QOverload<int>::of(&QComboBox::activated), [=](int index){
- //重新设置摄像头参数
- QCameraViewfinderSettings reset;
- reset.setResolution(mResSize[index]);
- camera->setViewfinderSettings(reset);
- });
-
- }
- Widget::~Widget()
- {
- delete ui;
- }
运行效果图
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。