diff --git a/examples/multimediawidgets/camera/camera.cpp b/examples/multimediawidgets/camera/camera.cpp index 3afe59324c90bf8e5c7846abd34f17fea943d24c..714de7a4d480b2c0266d374f55832f9882659105 100644 --- a/examples/multimediawidgets/camera/camera.cpp +++ b/examples/multimediawidgets/camera/camera.cpp @@ -46,6 +46,7 @@ #include <QMediaService> #include <QMediaRecorder> #include <QCameraViewfinder> +#include <QCameraInfo> #include <QMediaMetaData> #include <QMessageBox> @@ -53,6 +54,8 @@ #include <QtWidgets> +Q_DECLARE_METATYPE(QCameraInfo) + Camera::Camera(QWidget *parent) : QMainWindow(parent), ui(new Ui::Camera), @@ -65,26 +68,23 @@ Camera::Camera(QWidget *parent) : ui->setupUi(this); //Camera devices: - QByteArray cameraDevice; QActionGroup *videoDevicesGroup = new QActionGroup(this); videoDevicesGroup->setExclusive(true); - foreach(const QByteArray &deviceName, QCamera::availableDevices()) { - QString description = camera->deviceDescription(deviceName); - QAction *videoDeviceAction = new QAction(description, videoDevicesGroup); + foreach (const QCameraInfo &cameraInfo, QCameraInfo::availableCameras()) { + QAction *videoDeviceAction = new QAction(cameraInfo.description(), videoDevicesGroup); videoDeviceAction->setCheckable(true); - videoDeviceAction->setData(QVariant(deviceName)); - if (cameraDevice.isEmpty()) { - cameraDevice = deviceName; + videoDeviceAction->setData(QVariant::fromValue(cameraInfo)); + if (cameraInfo == QCameraInfo::defaultCamera()) videoDeviceAction->setChecked(true); - } + ui->menuDevices->addAction(videoDeviceAction); } connect(videoDevicesGroup, SIGNAL(triggered(QAction*)), SLOT(updateCameraDevice(QAction*))); connect(ui->captureWidget, SIGNAL(currentChanged(int)), SLOT(updateCaptureMode())); - setCamera(cameraDevice); + setCamera(QCameraInfo::defaultCamera()); } Camera::~Camera() @@ -94,16 +94,13 @@ Camera::~Camera() delete camera; } -void Camera::setCamera(const QByteArray &cameraDevice) +void Camera::setCamera(const QCameraInfo &cameraInfo) { delete imageCapture; delete mediaRecorder; delete camera; - if (cameraDevice.isEmpty()) - camera = new QCamera; - else - camera = new QCamera(cameraDevice); + camera = new QCamera(cameraInfo); connect(camera, SIGNAL(stateChanged(QCamera::State)), this, SLOT(updateCameraState(QCamera::State))); connect(camera, SIGNAL(error(QCamera::Error)), this, SLOT(displayCameraError())); @@ -398,7 +395,7 @@ void Camera::displayCameraError() void Camera::updateCameraDevice(QAction *action) { - setCamera(action->data().toByteArray()); + setCamera(qvariant_cast<QCameraInfo>(action->data())); } void Camera::displayViewfinder() diff --git a/examples/multimediawidgets/camera/camera.h b/examples/multimediawidgets/camera/camera.h index 52f03cbd366add53e0ff3ced2a9494dce8351308..faa02ccd75949c47df5c651bad9427bebc309870 100644 --- a/examples/multimediawidgets/camera/camera.h +++ b/examples/multimediawidgets/camera/camera.h @@ -60,7 +60,7 @@ public: ~Camera(); private slots: - void setCamera(const QByteArray &cameraDevice); + void setCamera(const QCameraInfo &cameraInfo); void startCamera(); void stopCamera();