<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>camera.cpp Example File | Qt Multimedia 5.12.2</title> <link rel="stylesheet" type="text/css" href="style/offline-simple.css" /> <script type="text/javascript"> document.getElementsByTagName("link").item(0).setAttribute("href", "style/offline.css"); // loading style sheet breaks anchors that were jumped to before // so force jumping to anchor again setTimeout(function() { var anchor = location.hash; // need to jump to different anchor first (e.g. none) location.hash = "#"; setTimeout(function() { location.hash = anchor; }, 0); }, 0); </script> </head> <body> <div class="header" id="qtdocheader"> <div class="main"> <div class="main-rounded"> <div class="navigationbar"> <table><tr> <td >Qt 5.12</td><td ><a href="qtmultimedia-index.html">Qt Multimedia</a></td><td ><a href="qtmultimedia-multimediawidgets-camera-example.html">Camera Example</a></td><td >camera.cpp Example File</td></tr></table><table class="buildversion"><tr> <td id="buildversion" width="100%" align="right"><a href="qtmultimedia-index.html">Qt 5.12.2 Reference Documentation</a></td> </tr></table> </div> </div> <div class="content"> <div class="line"> <div class="content mainContent"> <div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div> <h1 class="title">camera.cpp Example File</h1> <span class="subtitle">multimediawidgets/camera/camera.cpp</span> <!-- $$$multimediawidgets/camera/camera.cpp-description --> <div class="descr"> <a name="details"></a> <pre class="cpp"> <span class="comment">/**************************************************************************** ** ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/</span> <span class="preprocessor">#include "camera.h"</span> <span class="preprocessor">#include "ui_camera.h"</span> <span class="preprocessor">#include "videosettings.h"</span> <span class="preprocessor">#include "imagesettings.h"</span> <span class="preprocessor">#include <QMediaService></span> <span class="preprocessor">#include <QMediaRecorder></span> <span class="preprocessor">#include <QCameraViewfinder></span> <span class="preprocessor">#include <QCameraInfo></span> <span class="preprocessor">#include <QMediaMetaData></span> <span class="preprocessor">#include <QMessageBox></span> <span class="preprocessor">#include <QPalette></span> <span class="preprocessor">#include <QtWidgets></span> Q_DECLARE_METATYPE(<span class="type"><a href="qcamerainfo.html">QCameraInfo</a></span>) Camera<span class="operator">::</span>Camera() : ui(<span class="keyword">new</span> Ui<span class="operator">::</span>Camera) { ui<span class="operator">-</span><span class="operator">></span>setupUi(<span class="keyword">this</span>); <span class="comment">//Camera devices:</span> <span class="type">QActionGroup</span> <span class="operator">*</span>videoDevicesGroup <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QActionGroup</span>(<span class="keyword">this</span>); videoDevicesGroup<span class="operator">-</span><span class="operator">></span>setExclusive(<span class="keyword">true</span>); <span class="keyword">const</span> <span class="type">QList</span><span class="operator"><</span><span class="type"><a href="qcamerainfo.html">QCameraInfo</a></span><span class="operator">></span> availableCameras <span class="operator">=</span> <span class="type"><a href="qcamerainfo.html">QCameraInfo</a></span><span class="operator">::</span>availableCameras(); <span class="keyword">for</span> (<span class="keyword">const</span> <span class="type"><a href="qcamerainfo.html">QCameraInfo</a></span> <span class="operator">&</span>cameraInfo : availableCameras) { <span class="type">QAction</span> <span class="operator">*</span>videoDeviceAction <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QAction</span>(cameraInfo<span class="operator">.</span>description()<span class="operator">,</span> videoDevicesGroup); videoDeviceAction<span class="operator">-</span><span class="operator">></span>setCheckable(<span class="keyword">true</span>); videoDeviceAction<span class="operator">-</span><span class="operator">></span>setData(<span class="type">QVariant</span><span class="operator">::</span>fromValue(cameraInfo)); <span class="keyword">if</span> (cameraInfo <span class="operator">=</span><span class="operator">=</span> <span class="type"><a href="qcamerainfo.html">QCameraInfo</a></span><span class="operator">::</span>defaultCamera()) videoDeviceAction<span class="operator">-</span><span class="operator">></span>setChecked(<span class="keyword">true</span>); ui<span class="operator">-</span><span class="operator">></span>menuDevices<span class="operator">-</span><span class="operator">></span>addAction(videoDeviceAction); } connect(videoDevicesGroup<span class="operator">,</span> <span class="operator">&</span><span class="type">QActionGroup</span><span class="operator">::</span>triggered<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> <span class="operator">&</span>Camera<span class="operator">::</span>updateCameraDevice); connect(ui<span class="operator">-</span><span class="operator">></span>captureWidget<span class="operator">,</span> <span class="operator">&</span><span class="type">QTabWidget</span><span class="operator">::</span>currentChanged<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> <span class="operator">&</span>Camera<span class="operator">::</span>updateCaptureMode); setCamera(<span class="type"><a href="qcamerainfo.html">QCameraInfo</a></span><span class="operator">::</span>defaultCamera()); } <span class="type">void</span> Camera<span class="operator">::</span>setCamera(<span class="keyword">const</span> <span class="type"><a href="qcamerainfo.html">QCameraInfo</a></span> <span class="operator">&</span>cameraInfo) { m_camera<span class="operator">.</span>reset(<span class="keyword">new</span> <span class="type"><a href="qcamera.html">QCamera</a></span>(cameraInfo)); connect(m_camera<span class="operator">.</span>data()<span class="operator">,</span> <span class="operator">&</span><span class="type"><a href="qcamera.html">QCamera</a></span><span class="operator">::</span>stateChanged<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> <span class="operator">&</span>Camera<span class="operator">::</span>updateCameraState); connect(m_camera<span class="operator">.</span>data()<span class="operator">,</span> <span class="type">QOverload</span><span class="operator"><</span><span class="type"><a href="qcamera.html">QCamera</a></span><span class="operator">::</span>Error<span class="operator">></span><span class="operator">::</span>of(<span class="operator">&</span><span class="type"><a href="qcamera.html">QCamera</a></span><span class="operator">::</span>error)<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> <span class="operator">&</span>Camera<span class="operator">::</span>displayCameraError); m_mediaRecorder<span class="operator">.</span>reset(<span class="keyword">new</span> <span class="type"><a href="qmediarecorder.html">QMediaRecorder</a></span>(m_camera<span class="operator">.</span>data())); connect(m_mediaRecorder<span class="operator">.</span>data()<span class="operator">,</span> <span class="operator">&</span><span class="type"><a href="qmediarecorder.html">QMediaRecorder</a></span><span class="operator">::</span>stateChanged<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> <span class="operator">&</span>Camera<span class="operator">::</span>updateRecorderState); m_imageCapture<span class="operator">.</span>reset(<span class="keyword">new</span> <span class="type"><a href="qcameraimagecapture.html">QCameraImageCapture</a></span>(m_camera<span class="operator">.</span>data())); connect(m_mediaRecorder<span class="operator">.</span>data()<span class="operator">,</span> <span class="operator">&</span><span class="type"><a href="qmediarecorder.html">QMediaRecorder</a></span><span class="operator">::</span>durationChanged<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> <span class="operator">&</span>Camera<span class="operator">::</span>updateRecordTime); connect(m_mediaRecorder<span class="operator">.</span>data()<span class="operator">,</span> <span class="type">QOverload</span><span class="operator"><</span><span class="type"><a href="qmediarecorder.html">QMediaRecorder</a></span><span class="operator">::</span>Error<span class="operator">></span><span class="operator">::</span>of(<span class="operator">&</span><span class="type"><a href="qmediarecorder.html">QMediaRecorder</a></span><span class="operator">::</span>error)<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> <span class="operator">&</span>Camera<span class="operator">::</span>displayRecorderError); m_mediaRecorder<span class="operator">-</span><span class="operator">></span>setMetaData(<span class="type"><a href="qmediametadata.html">QMediaMetaData</a></span><span class="operator">::</span>Title<span class="operator">,</span> <span class="type">QVariant</span>(QLatin1String(<span class="string">"Test Title"</span>))); connect(ui<span class="operator">-</span><span class="operator">></span>exposureCompensation<span class="operator">,</span> <span class="operator">&</span><span class="type">QAbstractSlider</span><span class="operator">::</span>valueChanged<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> <span class="operator">&</span>Camera<span class="operator">::</span>setExposureCompensation); m_camera<span class="operator">-</span><span class="operator">></span>setViewfinder(ui<span class="operator">-</span><span class="operator">></span>viewfinder); updateCameraState(m_camera<span class="operator">-</span><span class="operator">></span>state()); updateLockStatus(m_camera<span class="operator">-</span><span class="operator">></span>lockStatus()<span class="operator">,</span> <span class="type"><a href="qcamera.html">QCamera</a></span><span class="operator">::</span>UserRequest); updateRecorderState(m_mediaRecorder<span class="operator">-</span><span class="operator">></span>state()); connect(m_imageCapture<span class="operator">.</span>data()<span class="operator">,</span> <span class="operator">&</span><span class="type"><a href="qcameraimagecapture.html">QCameraImageCapture</a></span><span class="operator">::</span>readyForCaptureChanged<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> <span class="operator">&</span>Camera<span class="operator">::</span>readyForCapture); connect(m_imageCapture<span class="operator">.</span>data()<span class="operator">,</span> <span class="operator">&</span><span class="type"><a href="qcameraimagecapture.html">QCameraImageCapture</a></span><span class="operator">::</span>imageCaptured<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> <span class="operator">&</span>Camera<span class="operator">::</span>processCapturedImage); connect(m_imageCapture<span class="operator">.</span>data()<span class="operator">,</span> <span class="operator">&</span><span class="type"><a href="qcameraimagecapture.html">QCameraImageCapture</a></span><span class="operator">::</span>imageSaved<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> <span class="operator">&</span>Camera<span class="operator">::</span>imageSaved); connect(m_imageCapture<span class="operator">.</span>data()<span class="operator">,</span> <span class="type">QOverload</span><span class="operator"><</span><span class="type">int</span><span class="operator">,</span> <span class="type"><a href="qcameraimagecapture.html">QCameraImageCapture</a></span><span class="operator">::</span>Error<span class="operator">,</span> <span class="keyword">const</span> <span class="type">QString</span> <span class="operator">&</span><span class="operator">></span><span class="operator">::</span>of(<span class="operator">&</span><span class="type"><a href="qcameraimagecapture.html">QCameraImageCapture</a></span><span class="operator">::</span>error)<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> <span class="operator">&</span>Camera<span class="operator">::</span>displayCaptureError); connect(m_camera<span class="operator">.</span>data()<span class="operator">,</span> <span class="type">QOverload</span><span class="operator"><</span><span class="type"><a href="qcamera.html">QCamera</a></span><span class="operator">::</span>LockStatus<span class="operator">,</span> <span class="type"><a href="qcamera.html">QCamera</a></span><span class="operator">::</span>LockChangeReason<span class="operator">></span><span class="operator">::</span>of(<span class="operator">&</span><span class="type"><a href="qcamera.html">QCamera</a></span><span class="operator">::</span>lockStatusChanged)<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> <span class="operator">&</span>Camera<span class="operator">::</span>updateLockStatus); ui<span class="operator">-</span><span class="operator">></span>captureWidget<span class="operator">-</span><span class="operator">></span>setTabEnabled(<span class="number">0</span><span class="operator">,</span> (m_camera<span class="operator">-</span><span class="operator">></span>isCaptureModeSupported(<span class="type"><a href="qcamera.html">QCamera</a></span><span class="operator">::</span>CaptureStillImage))); ui<span class="operator">-</span><span class="operator">></span>captureWidget<span class="operator">-</span><span class="operator">></span>setTabEnabled(<span class="number">1</span><span class="operator">,</span> (m_camera<span class="operator">-</span><span class="operator">></span>isCaptureModeSupported(<span class="type"><a href="qcamera.html">QCamera</a></span><span class="operator">::</span>CaptureVideo))); updateCaptureMode(); m_camera<span class="operator">-</span><span class="operator">></span>start(); } <span class="type">void</span> Camera<span class="operator">::</span>keyPressEvent(<span class="type">QKeyEvent</span> <span class="operator">*</span> event) { <span class="keyword">if</span> (event<span class="operator">-</span><span class="operator">></span>isAutoRepeat()) <span class="keyword">return</span>; <span class="keyword">switch</span> (event<span class="operator">-</span><span class="operator">></span>key()) { <span class="keyword">case</span> <span class="type">Qt</span><span class="operator">::</span>Key_CameraFocus: displayViewfinder(); m_camera<span class="operator">-</span><span class="operator">></span>searchAndLock(); event<span class="operator">-</span><span class="operator">></span>accept(); <span class="keyword">break</span>; <span class="keyword">case</span> <span class="type">Qt</span><span class="operator">::</span>Key_Camera: <span class="keyword">if</span> (m_camera<span class="operator">-</span><span class="operator">></span>captureMode() <span class="operator">=</span><span class="operator">=</span> <span class="type"><a href="qcamera.html">QCamera</a></span><span class="operator">::</span>CaptureStillImage) { takeImage(); } <span class="keyword">else</span> { <span class="keyword">if</span> (m_mediaRecorder<span class="operator">-</span><span class="operator">></span>state() <span class="operator">=</span><span class="operator">=</span> <span class="type"><a href="qmediarecorder.html">QMediaRecorder</a></span><span class="operator">::</span>RecordingState) stop(); <span class="keyword">else</span> record(); } event<span class="operator">-</span><span class="operator">></span>accept(); <span class="keyword">break</span>; <span class="keyword">default</span>: <span class="type">QMainWindow</span><span class="operator">::</span>keyPressEvent(event); } } <span class="type">void</span> Camera<span class="operator">::</span>keyReleaseEvent(<span class="type">QKeyEvent</span> <span class="operator">*</span>event) { <span class="keyword">if</span> (event<span class="operator">-</span><span class="operator">></span>isAutoRepeat()) <span class="keyword">return</span>; <span class="keyword">switch</span> (event<span class="operator">-</span><span class="operator">></span>key()) { <span class="keyword">case</span> <span class="type">Qt</span><span class="operator">::</span>Key_CameraFocus: m_camera<span class="operator">-</span><span class="operator">></span>unlock(); <span class="keyword">break</span>; <span class="keyword">default</span>: <span class="type">QMainWindow</span><span class="operator">::</span>keyReleaseEvent(event); } } <span class="type">void</span> Camera<span class="operator">::</span>updateRecordTime() { <span class="type">QString</span> str <span class="operator">=</span> <span class="type">QString</span>(<span class="string">"Recorded %1 sec"</span>)<span class="operator">.</span>arg(m_mediaRecorder<span class="operator">-</span><span class="operator">></span>duration()<span class="operator">/</span><span class="number">1000</span>); ui<span class="operator">-</span><span class="operator">></span>statusbar<span class="operator">-</span><span class="operator">></span>showMessage(str); } <span class="type">void</span> Camera<span class="operator">::</span>processCapturedImage(<span class="type">int</span> requestId<span class="operator">,</span> <span class="keyword">const</span> <span class="type">QImage</span><span class="operator">&</span> img) { Q_UNUSED(requestId); <span class="type">QImage</span> scaledImage <span class="operator">=</span> img<span class="operator">.</span>scaled(ui<span class="operator">-</span><span class="operator">></span>viewfinder<span class="operator">-</span><span class="operator">></span>size()<span class="operator">,</span> <span class="type">Qt</span><span class="operator">::</span>KeepAspectRatio<span class="operator">,</span> <span class="type">Qt</span><span class="operator">::</span>SmoothTransformation); ui<span class="operator">-</span><span class="operator">></span>lastImagePreviewLabel<span class="operator">-</span><span class="operator">></span>setPixmap(<span class="type">QPixmap</span><span class="operator">::</span>fromImage(scaledImage)); <span class="comment">// Display captured image for 4 seconds.</span> displayCapturedImage(); <span class="type">QTimer</span><span class="operator">::</span>singleShot(<span class="number">4000</span><span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> <span class="operator">&</span>Camera<span class="operator">::</span>displayViewfinder); } <span class="type">void</span> Camera<span class="operator">::</span>configureCaptureSettings() { <span class="keyword">switch</span> (m_camera<span class="operator">-</span><span class="operator">></span>captureMode()) { <span class="keyword">case</span> <span class="type"><a href="qcamera.html">QCamera</a></span><span class="operator">::</span>CaptureStillImage: configureImageSettings(); <span class="keyword">break</span>; <span class="keyword">case</span> <span class="type"><a href="qcamera.html">QCamera</a></span><span class="operator">::</span>CaptureVideo: configureVideoSettings(); <span class="keyword">break</span>; <span class="keyword">default</span>: <span class="keyword">break</span>; } } <span class="type">void</span> Camera<span class="operator">::</span>configureVideoSettings() { VideoSettings settingsDialog(m_mediaRecorder<span class="operator">.</span>data()); settingsDialog<span class="operator">.</span>setWindowFlags(settingsDialog<span class="operator">.</span>windowFlags() <span class="operator">&</span> <span class="operator">~</span><span class="type">Qt</span><span class="operator">::</span>WindowContextHelpButtonHint); settingsDialog<span class="operator">.</span>setAudioSettings(m_audioSettings); settingsDialog<span class="operator">.</span>setVideoSettings(m_videoSettings); settingsDialog<span class="operator">.</span>setFormat(m_videoContainerFormat); <span class="keyword">if</span> (settingsDialog<span class="operator">.</span>exec()) { m_audioSettings <span class="operator">=</span> settingsDialog<span class="operator">.</span>audioSettings(); m_videoSettings <span class="operator">=</span> settingsDialog<span class="operator">.</span>videoSettings(); m_videoContainerFormat <span class="operator">=</span> settingsDialog<span class="operator">.</span>format(); m_mediaRecorder<span class="operator">-</span><span class="operator">></span>setEncodingSettings( m_audioSettings<span class="operator">,</span> m_videoSettings<span class="operator">,</span> m_videoContainerFormat); m_camera<span class="operator">-</span><span class="operator">></span>unload(); m_camera<span class="operator">-</span><span class="operator">></span>start(); } } <span class="type">void</span> Camera<span class="operator">::</span>configureImageSettings() { ImageSettings settingsDialog(m_imageCapture<span class="operator">.</span>data()); settingsDialog<span class="operator">.</span>setWindowFlags(settingsDialog<span class="operator">.</span>windowFlags() <span class="operator">&</span> <span class="operator">~</span><span class="type">Qt</span><span class="operator">::</span>WindowContextHelpButtonHint); settingsDialog<span class="operator">.</span>setImageSettings(m_imageSettings); <span class="keyword">if</span> (settingsDialog<span class="operator">.</span>exec()) { m_imageSettings <span class="operator">=</span> settingsDialog<span class="operator">.</span>imageSettings(); m_imageCapture<span class="operator">-</span><span class="operator">></span>setEncodingSettings(m_imageSettings); } } <span class="type">void</span> Camera<span class="operator">::</span>record() { m_mediaRecorder<span class="operator">-</span><span class="operator">></span>record(); updateRecordTime(); } <span class="type">void</span> Camera<span class="operator">::</span>pause() { m_mediaRecorder<span class="operator">-</span><span class="operator">></span>pause(); } <span class="type">void</span> Camera<span class="operator">::</span>stop() { m_mediaRecorder<span class="operator">-</span><span class="operator">></span>stop(); } <span class="type">void</span> Camera<span class="operator">::</span>setMuted(bool muted) { m_mediaRecorder<span class="operator">-</span><span class="operator">></span>setMuted(muted); } <span class="type">void</span> Camera<span class="operator">::</span>toggleLock() { <span class="keyword">switch</span> (m_camera<span class="operator">-</span><span class="operator">></span>lockStatus()) { <span class="keyword">case</span> <span class="type"><a href="qcamera.html">QCamera</a></span><span class="operator">::</span>Searching: <span class="keyword">case</span> <span class="type"><a href="qcamera.html">QCamera</a></span><span class="operator">::</span>Locked: m_camera<span class="operator">-</span><span class="operator">></span>unlock(); <span class="keyword">break</span>; <span class="keyword">case</span> <span class="type"><a href="qcamera.html">QCamera</a></span><span class="operator">::</span>Unlocked: m_camera<span class="operator">-</span><span class="operator">></span>searchAndLock(); } } <span class="type">void</span> Camera<span class="operator">::</span>updateLockStatus(<span class="type"><a href="qcamera.html">QCamera</a></span><span class="operator">::</span>LockStatus status<span class="operator">,</span> <span class="type"><a href="qcamera.html">QCamera</a></span><span class="operator">::</span>LockChangeReason reason) { <span class="type">QColor</span> indicationColor <span class="operator">=</span> <span class="type">Qt</span><span class="operator">::</span>black; <span class="keyword">switch</span> (status) { <span class="keyword">case</span> <span class="type"><a href="qcamera.html">QCamera</a></span><span class="operator">::</span>Searching: indicationColor <span class="operator">=</span> <span class="type">Qt</span><span class="operator">::</span>yellow; ui<span class="operator">-</span><span class="operator">></span>statusbar<span class="operator">-</span><span class="operator">></span>showMessage(tr(<span class="string">"Focusing..."</span>)); ui<span class="operator">-</span><span class="operator">></span>lockButton<span class="operator">-</span><span class="operator">></span>setText(tr(<span class="string">"Focusing..."</span>)); <span class="keyword">break</span>; <span class="keyword">case</span> <span class="type"><a href="qcamera.html">QCamera</a></span><span class="operator">::</span>Locked: indicationColor <span class="operator">=</span> <span class="type">Qt</span><span class="operator">::</span>darkGreen; ui<span class="operator">-</span><span class="operator">></span>lockButton<span class="operator">-</span><span class="operator">></span>setText(tr(<span class="string">"Unlock"</span>)); ui<span class="operator">-</span><span class="operator">></span>statusbar<span class="operator">-</span><span class="operator">></span>showMessage(tr(<span class="string">"Focused"</span>)<span class="operator">,</span> <span class="number">2000</span>); <span class="keyword">break</span>; <span class="keyword">case</span> <span class="type"><a href="qcamera.html">QCamera</a></span><span class="operator">::</span>Unlocked: indicationColor <span class="operator">=</span> reason <span class="operator">=</span><span class="operator">=</span> <span class="type"><a href="qcamera.html">QCamera</a></span><span class="operator">::</span>LockFailed <span class="operator">?</span> <span class="type">Qt</span><span class="operator">::</span>red : <span class="type">Qt</span><span class="operator">::</span>black; ui<span class="operator">-</span><span class="operator">></span>lockButton<span class="operator">-</span><span class="operator">></span>setText(tr(<span class="string">"Focus"</span>)); <span class="keyword">if</span> (reason <span class="operator">=</span><span class="operator">=</span> <span class="type"><a href="qcamera.html">QCamera</a></span><span class="operator">::</span>LockFailed) ui<span class="operator">-</span><span class="operator">></span>statusbar<span class="operator">-</span><span class="operator">></span>showMessage(tr(<span class="string">"Focus Failed"</span>)<span class="operator">,</span> <span class="number">2000</span>); } <span class="type">QPalette</span> palette <span class="operator">=</span> ui<span class="operator">-</span><span class="operator">></span>lockButton<span class="operator">-</span><span class="operator">></span>palette(); palette<span class="operator">.</span>setColor(<span class="type">QPalette</span><span class="operator">::</span>ButtonText<span class="operator">,</span> indicationColor); ui<span class="operator">-</span><span class="operator">></span>lockButton<span class="operator">-</span><span class="operator">></span>setPalette(palette); } <span class="type">void</span> Camera<span class="operator">::</span>takeImage() { m_isCapturingImage <span class="operator">=</span> <span class="keyword">true</span>; m_imageCapture<span class="operator">-</span><span class="operator">></span>capture(); } <span class="type">void</span> Camera<span class="operator">::</span>displayCaptureError(<span class="type">int</span> id<span class="operator">,</span> <span class="keyword">const</span> <span class="type"><a href="qcameraimagecapture.html">QCameraImageCapture</a></span><span class="operator">::</span>Error error<span class="operator">,</span> <span class="keyword">const</span> <span class="type">QString</span> <span class="operator">&</span>errorString) { Q_UNUSED(id); Q_UNUSED(error); <span class="type">QMessageBox</span><span class="operator">::</span>warning(<span class="keyword">this</span><span class="operator">,</span> tr(<span class="string">"Image Capture Error"</span>)<span class="operator">,</span> errorString); m_isCapturingImage <span class="operator">=</span> <span class="keyword">false</span>; } <span class="type">void</span> Camera<span class="operator">::</span>startCamera() { m_camera<span class="operator">-</span><span class="operator">></span>start(); } <span class="type">void</span> Camera<span class="operator">::</span>stopCamera() { m_camera<span class="operator">-</span><span class="operator">></span>stop(); } <span class="type">void</span> Camera<span class="operator">::</span>updateCaptureMode() { <span class="type">int</span> tabIndex <span class="operator">=</span> ui<span class="operator">-</span><span class="operator">></span>captureWidget<span class="operator">-</span><span class="operator">></span>currentIndex(); <span class="type"><a href="qcamera.html">QCamera</a></span><span class="operator">::</span>CaptureModes captureMode <span class="operator">=</span> tabIndex <span class="operator">=</span><span class="operator">=</span> <span class="number">0</span> <span class="operator">?</span> <span class="type"><a href="qcamera.html">QCamera</a></span><span class="operator">::</span>CaptureStillImage : <span class="type"><a href="qcamera.html">QCamera</a></span><span class="operator">::</span>CaptureVideo; <span class="keyword">if</span> (m_camera<span class="operator">-</span><span class="operator">></span>isCaptureModeSupported(captureMode)) m_camera<span class="operator">-</span><span class="operator">></span>setCaptureMode(captureMode); } <span class="type">void</span> Camera<span class="operator">::</span>updateCameraState(<span class="type"><a href="qcamera.html">QCamera</a></span><span class="operator">::</span>State state) { <span class="keyword">switch</span> (state) { <span class="keyword">case</span> <span class="type"><a href="qcamera.html">QCamera</a></span><span class="operator">::</span>ActiveState: ui<span class="operator">-</span><span class="operator">></span>actionStartCamera<span class="operator">-</span><span class="operator">></span>setEnabled(<span class="keyword">false</span>); ui<span class="operator">-</span><span class="operator">></span>actionStopCamera<span class="operator">-</span><span class="operator">></span>setEnabled(<span class="keyword">true</span>); ui<span class="operator">-</span><span class="operator">></span>captureWidget<span class="operator">-</span><span class="operator">></span>setEnabled(<span class="keyword">true</span>); ui<span class="operator">-</span><span class="operator">></span>actionSettings<span class="operator">-</span><span class="operator">></span>setEnabled(<span class="keyword">true</span>); <span class="keyword">break</span>; <span class="keyword">case</span> <span class="type"><a href="qcamera.html">QCamera</a></span><span class="operator">::</span>UnloadedState: <span class="keyword">case</span> <span class="type"><a href="qcamera.html">QCamera</a></span><span class="operator">::</span>LoadedState: ui<span class="operator">-</span><span class="operator">></span>actionStartCamera<span class="operator">-</span><span class="operator">></span>setEnabled(<span class="keyword">true</span>); ui<span class="operator">-</span><span class="operator">></span>actionStopCamera<span class="operator">-</span><span class="operator">></span>setEnabled(<span class="keyword">false</span>); ui<span class="operator">-</span><span class="operator">></span>captureWidget<span class="operator">-</span><span class="operator">></span>setEnabled(<span class="keyword">false</span>); ui<span class="operator">-</span><span class="operator">></span>actionSettings<span class="operator">-</span><span class="operator">></span>setEnabled(<span class="keyword">false</span>); } } <span class="type">void</span> Camera<span class="operator">::</span>updateRecorderState(<span class="type"><a href="qmediarecorder.html">QMediaRecorder</a></span><span class="operator">::</span>State state) { <span class="keyword">switch</span> (state) { <span class="keyword">case</span> <span class="type"><a href="qmediarecorder.html">QMediaRecorder</a></span><span class="operator">::</span>StoppedState: ui<span class="operator">-</span><span class="operator">></span>recordButton<span class="operator">-</span><span class="operator">></span>setEnabled(<span class="keyword">true</span>); ui<span class="operator">-</span><span class="operator">></span>pauseButton<span class="operator">-</span><span class="operator">></span>setEnabled(<span class="keyword">true</span>); ui<span class="operator">-</span><span class="operator">></span>stopButton<span class="operator">-</span><span class="operator">></span>setEnabled(<span class="keyword">false</span>); <span class="keyword">break</span>; <span class="keyword">case</span> <span class="type"><a href="qmediarecorder.html">QMediaRecorder</a></span><span class="operator">::</span>PausedState: ui<span class="operator">-</span><span class="operator">></span>recordButton<span class="operator">-</span><span class="operator">></span>setEnabled(<span class="keyword">true</span>); ui<span class="operator">-</span><span class="operator">></span>pauseButton<span class="operator">-</span><span class="operator">></span>setEnabled(<span class="keyword">false</span>); ui<span class="operator">-</span><span class="operator">></span>stopButton<span class="operator">-</span><span class="operator">></span>setEnabled(<span class="keyword">true</span>); <span class="keyword">break</span>; <span class="keyword">case</span> <span class="type"><a href="qmediarecorder.html">QMediaRecorder</a></span><span class="operator">::</span>RecordingState: ui<span class="operator">-</span><span class="operator">></span>recordButton<span class="operator">-</span><span class="operator">></span>setEnabled(<span class="keyword">false</span>); ui<span class="operator">-</span><span class="operator">></span>pauseButton<span class="operator">-</span><span class="operator">></span>setEnabled(<span class="keyword">true</span>); ui<span class="operator">-</span><span class="operator">></span>stopButton<span class="operator">-</span><span class="operator">></span>setEnabled(<span class="keyword">true</span>); <span class="keyword">break</span>; } } <span class="type">void</span> Camera<span class="operator">::</span>setExposureCompensation(<span class="type">int</span> index) { m_camera<span class="operator">-</span><span class="operator">></span>exposure()<span class="operator">-</span><span class="operator">></span>setExposureCompensation(index<span class="operator">*</span><span class="number">0.5</span>); } <span class="type">void</span> Camera<span class="operator">::</span>displayRecorderError() { <span class="type">QMessageBox</span><span class="operator">::</span>warning(<span class="keyword">this</span><span class="operator">,</span> tr(<span class="string">"Capture Error"</span>)<span class="operator">,</span> m_mediaRecorder<span class="operator">-</span><span class="operator">></span>errorString()); } <span class="type">void</span> Camera<span class="operator">::</span>displayCameraError() { <span class="type">QMessageBox</span><span class="operator">::</span>warning(<span class="keyword">this</span><span class="operator">,</span> tr(<span class="string">"Camera Error"</span>)<span class="operator">,</span> m_camera<span class="operator">-</span><span class="operator">></span>errorString()); } <span class="type">void</span> Camera<span class="operator">::</span>updateCameraDevice(<span class="type">QAction</span> <span class="operator">*</span>action) { setCamera(qvariant_cast<span class="operator"><</span><span class="type"><a href="qcamerainfo.html">QCameraInfo</a></span><span class="operator">></span>(action<span class="operator">-</span><span class="operator">></span>data())); } <span class="type">void</span> Camera<span class="operator">::</span>displayViewfinder() { ui<span class="operator">-</span><span class="operator">></span>stackedWidget<span class="operator">-</span><span class="operator">></span>setCurrentIndex(<span class="number">0</span>); } <span class="type">void</span> Camera<span class="operator">::</span>displayCapturedImage() { ui<span class="operator">-</span><span class="operator">></span>stackedWidget<span class="operator">-</span><span class="operator">></span>setCurrentIndex(<span class="number">1</span>); } <span class="type">void</span> Camera<span class="operator">::</span>readyForCapture(bool ready) { ui<span class="operator">-</span><span class="operator">></span>takeImageButton<span class="operator">-</span><span class="operator">></span>setEnabled(ready); } <span class="type">void</span> Camera<span class="operator">::</span>imageSaved(<span class="type">int</span> id<span class="operator">,</span> <span class="keyword">const</span> <span class="type">QString</span> <span class="operator">&</span>fileName) { Q_UNUSED(id); ui<span class="operator">-</span><span class="operator">></span>statusbar<span class="operator">-</span><span class="operator">></span>showMessage(tr(<span class="string">"Captured \"%1\""</span>)<span class="operator">.</span>arg(<span class="type">QDir</span><span class="operator">::</span>toNativeSeparators(fileName))); m_isCapturingImage <span class="operator">=</span> <span class="keyword">false</span>; <span class="keyword">if</span> (m_applicationExiting) close(); } <span class="type">void</span> Camera<span class="operator">::</span>closeEvent(<span class="type">QCloseEvent</span> <span class="operator">*</span>event) { <span class="keyword">if</span> (m_isCapturingImage) { setEnabled(<span class="keyword">false</span>); m_applicationExiting <span class="operator">=</span> <span class="keyword">true</span>; event<span class="operator">-</span><span class="operator">></span>ignore(); } <span class="keyword">else</span> { event<span class="operator">-</span><span class="operator">></span>accept(); } } </pre> </div> <!-- @@@multimediawidgets/camera/camera.cpp --> </div> </div> </div> </div> </div> <div class="footer"> <p> <acronym title="Copyright">©</acronym> 2019 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners.<br/> The documentation provided herein is licensed under the terms of the <a href="http://www.gnu.org/licenses/fdl.html">GNU Free Documentation License version 1.3</a> as published by the Free Software Foundation.<br/> Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners. </p> </div> </body> </html>