Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qandroidcamera.cpp
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#include "qandroidcamera_p.h"
8#include <qmediadevices.h>
9#include <qcameradevice.h>
10#include <qtimer.h>
12
14
20
24
26{
27 if (m_cameraSession) {
28 m_cameraSession->setActive(active);
29 } else {
30 isPendingSetActive = active;
31 }
32}
33
35{
36 return m_cameraSession ? m_cameraSession->isActive() : false;
37}
38
40{
41 m_cameraDev = camera;
42
43 if (m_cameraSession) {
44 int id = 0;
45 auto cameras = QMediaDevices::videoInputs();
46 for (int i = 0; i < cameras.size(); ++i) {
47 if (cameras.at(i) == camera) {
48 id = i;
49 break;
50 }
51 }
52 if (id != m_cameraSession->getSelectedCameraId()) {
53 m_cameraSession->setSelectedCameraId(id);
54 reactivateCameraSession();
55 }
56 }
57}
58
59void QAndroidCamera::reactivateCameraSession()
60{
61 if (m_cameraSession->isActive()) {
62 if (m_service->captureSession() &&
64 m_service->captureSession()->stop();
65 qWarning() << "Changing camera during recording not supported";
66 }
67 m_cameraSession->setActive(false);
68 m_cameraSession->setActive(true);
69 }
70}
71
73{
74 m_cameraFormat = format;
75
76 if (m_cameraSession)
77 m_cameraSession->setCameraFormat(m_cameraFormat);
78
79 return true;
80}
81
83{
84 QAndroidMediaCaptureSession *captureSession = static_cast<QAndroidMediaCaptureSession *>(session);
85 if (m_service == captureSession)
86 return;
87
88 m_service = captureSession;
89 if (!m_service) {
90 disconnect(m_cameraSession,nullptr,this,nullptr);
91 m_cameraSession = nullptr;
92 return;
93 }
94
95 m_cameraSession = m_service->cameraSession();
96 Q_ASSERT(m_cameraSession);
97 if (!m_cameraFormat.isNull())
98 m_cameraSession->setCameraFormat(m_cameraFormat);
99
100 setCamera(m_cameraDev);
101
104 connect(m_cameraSession, &QAndroidCameraSession::opened, this, &QAndroidCamera::onCameraOpened);
105
106 if (isPendingSetActive) {
107 setActive(true);
108 isPendingSetActive = false;
109 }
110}
111
113{
114 if (!m_cameraSession || !m_cameraSession->camera())
115 return;
116
119
120 switch (mode) {
122 focusMode = QLatin1String("edof");
123 break;
124 case QCamera::FocusModeInfinity: // not 100%, but close
125 focusMode = QLatin1String("infinity");
126 break;
128 focusMode = QLatin1String("fixed");
129 break;
131 focusMode = QLatin1String("macro");
132 break;
135 if (1) { // ###?
136 focusMode = QLatin1String("continuous-video");
137 } else {
138 focusMode = QLatin1String("continuous-picture");
139 }
140 break;
141 }
142
143 m_cameraSession->camera()->setFocusMode(focusMode);
144
145 // reset focus position
146 m_cameraSession->camera()->cancelAutoFocus();
147
149 }
150}
151
153{
154 return (m_cameraSession && m_cameraSession->camera()) ? m_supportedFocusModes.contains(mode) : false;
155}
156
157void QAndroidCamera::onCameraOpened()
158{
159 Q_ASSERT(m_cameraSession);
160 connect(m_cameraSession->camera(), &AndroidCamera::previewSizeChanged, this, &QAndroidCamera::setCameraFocusArea);
161
162 m_supportedFocusModes.clear();
163 m_continuousPictureFocusSupported = false;
164 m_continuousVideoFocusSupported = false;
165 m_focusPointSupported = false;
166
167 QStringList focusModes = m_cameraSession->camera()->getSupportedFocusModes();
168 for (int i = 0; i < focusModes.size(); ++i) {
169 const QString &focusMode = focusModes.at(i);
170 if (focusMode == QLatin1String("continuous-picture")) {
171 m_supportedFocusModes << QCamera::FocusModeAuto;
172 m_continuousPictureFocusSupported = true;
173 } else if (focusMode == QLatin1String("continuous-video")) {
174 m_supportedFocusModes << QCamera::FocusModeAuto;
175 m_continuousVideoFocusSupported = true;
176 } else if (focusMode == QLatin1String("edof")) {
177 m_supportedFocusModes << QCamera::FocusModeHyperfocal;
178 } else if (focusMode == QLatin1String("fixed")) {
179 m_supportedFocusModes << QCamera::FocusModeManual;
180 } else if (focusMode == QLatin1String("infinity")) {
181 m_supportedFocusModes << QCamera::FocusModeInfinity;
182 } else if (focusMode == QLatin1String("macro")) {
183 m_supportedFocusModes << QCamera::FocusModeAutoNear;
184 }
185 }
186
187 if (m_cameraSession->camera()->getMaxNumFocusAreas() > 0)
188 m_focusPointSupported = true;
189
190 auto m = focusMode();
191 if (!m_supportedFocusModes.contains(m))
193
196
197 if (m_cameraSession->camera()->isZoomSupported()) {
198 m_zoomRatios = m_cameraSession->camera()->getZoomRatios();
199 qreal maxZoom = m_zoomRatios.last() / qreal(100);
201 zoomTo(1, -1);
202 } else {
203 m_zoomRatios.clear();
205 }
206
207 m_minExposureCompensationIndex = m_cameraSession->camera()->getMinExposureCompensation();
208 m_maxExposureCompensationIndex = m_cameraSession->camera()->getMaxExposureCompensation();
209 m_exposureCompensationStep = m_cameraSession->camera()->getExposureCompensationStep();
210 exposureCompensationRangeChanged(m_minExposureCompensationIndex*m_exposureCompensationStep,
211 m_maxExposureCompensationIndex*m_exposureCompensationStep);
212
213 m_supportedExposureModes.clear();
214 QStringList sceneModes = m_cameraSession->camera()->getSupportedSceneModes();
215 if (!sceneModes.isEmpty()) {
216 for (int i = 0; i < sceneModes.size(); ++i) {
217 const QString &sceneMode = sceneModes.at(i);
218 if (sceneMode == QLatin1String("auto"))
219 m_supportedExposureModes << QCamera::ExposureAuto;
220 else if (sceneMode == QLatin1String("beach"))
221 m_supportedExposureModes << QCamera::ExposureBeach;
222 else if (sceneMode == QLatin1String("night"))
223 m_supportedExposureModes << QCamera::ExposureNight;
224 else if (sceneMode == QLatin1String("portrait"))
225 m_supportedExposureModes << QCamera::ExposurePortrait;
226 else if (sceneMode == QLatin1String("snow"))
227 m_supportedExposureModes << QCamera::ExposureSnow;
228 else if (sceneMode == QLatin1String("sports"))
229 m_supportedExposureModes << QCamera::ExposureSports;
230 else if (sceneMode == QLatin1String("action"))
231 m_supportedExposureModes << QCamera::ExposureAction;
232 else if (sceneMode == QLatin1String("landscape"))
233 m_supportedExposureModes << QCamera::ExposureLandscape;
234 else if (sceneMode == QLatin1String("night-portrait"))
235 m_supportedExposureModes << QCamera::ExposureNightPortrait;
236 else if (sceneMode == QLatin1String("theatre"))
237 m_supportedExposureModes << QCamera::ExposureTheatre;
238 else if (sceneMode == QLatin1String("sunset"))
239 m_supportedExposureModes << QCamera::ExposureSunset;
240 else if (sceneMode == QLatin1String("steadyphoto"))
241 m_supportedExposureModes << QCamera::ExposureSteadyPhoto;
242 else if (sceneMode == QLatin1String("fireworks"))
243 m_supportedExposureModes << QCamera::ExposureFireworks;
244 else if (sceneMode == QLatin1String("party"))
245 m_supportedExposureModes << QCamera::ExposureParty;
246 else if (sceneMode == QLatin1String("candlelight"))
247 m_supportedExposureModes << QCamera::ExposureCandlelight;
248 else if (sceneMode == QLatin1String("barcode"))
249 m_supportedExposureModes << QCamera::ExposureBarcode;
250 }
251 }
252
255
256 isFlashSupported = false;
257 isFlashAutoSupported = false;
258 isTorchSupported = false;
259
260 QStringList flashModes = m_cameraSession->camera()->getSupportedFlashModes();
261 for (int i = 0; i < flashModes.size(); ++i) {
262 const QString &flashMode = flashModes.at(i);
263 if (flashMode == QLatin1String("auto"))
264 isFlashAutoSupported = true;
265 else if (flashMode == QLatin1String("on"))
266 isFlashSupported = true;
267 else if (flashMode == QLatin1String("torch"))
268 isTorchSupported = true;
269 }
270
272
273 m_supportedWhiteBalanceModes.clear();
274 QStringList whiteBalanceModes = m_cameraSession->camera()->getSupportedWhiteBalance();
275 for (int i = 0; i < whiteBalanceModes.size(); ++i) {
276 const QString &wb = whiteBalanceModes.at(i);
277 if (wb == QLatin1String("auto")) {
278 m_supportedWhiteBalanceModes.insert(QCamera::WhiteBalanceAuto,
279 QStringLiteral("auto"));
280 } else if (wb == QLatin1String("cloudy-daylight")) {
281 m_supportedWhiteBalanceModes.insert(QCamera::WhiteBalanceCloudy,
282 QStringLiteral("cloudy-daylight"));
283 } else if (wb == QLatin1String("daylight")) {
284 m_supportedWhiteBalanceModes.insert(QCamera::WhiteBalanceSunlight,
285 QStringLiteral("daylight"));
286 } else if (wb == QLatin1String("fluorescent")) {
287 m_supportedWhiteBalanceModes.insert(QCamera::WhiteBalanceFluorescent,
288 QStringLiteral("fluorescent"));
289 } else if (wb == QLatin1String("incandescent")) {
290 m_supportedWhiteBalanceModes.insert(QCamera::WhiteBalanceTungsten,
291 QStringLiteral("incandescent"));
292 } else if (wb == QLatin1String("shade")) {
293 m_supportedWhiteBalanceModes.insert(QCamera::WhiteBalanceShade,
294 QStringLiteral("shade"));
295 } else if (wb == QLatin1String("twilight")) {
296 m_supportedWhiteBalanceModes.insert(QCamera::WhiteBalanceSunset,
297 QStringLiteral("twilight"));
298 } else if (wb == QLatin1String("warm-fluorescent")) {
299 m_supportedWhiteBalanceModes.insert(QCamera::WhiteBalanceFlash,
300 QStringLiteral("warm-fluorescent"));
301 }
302 }
303
304}
305
306//void QAndroidCameraFocusControl::onCameraCaptureModeChanged()
307//{
308// if (m_cameraSession->camera() && m_focusMode == QCamera::FocusModeAudio) {
309// QString focusMode;
310// if ((m_cameraSession->captureMode().testFlag(QCamera::CaptureVideo) && m_continuousVideoFocusSupported)
311// || !m_continuousPictureFocusSupported) {
312// focusMode = QLatin1String("continuous-video");
313// } else {
314// focusMode = QLatin1String("continuous-picture");
315// }
316// m_cameraSession->camera()->setFocusMode(focusMode);
317// m_cameraSession->camera()->cancelAutoFocus();
318// }
319//}
320
322{
323 // Qt maps focus points in the range (0.0, 0.0) -> (1.0, 1.0)
324 // Android maps focus points in the range (-1000, -1000) -> (1000, 1000)
325 // Converts an area in Qt coordinates to Android coordinates
326 return QRect(-1000 + qRound(area.x() * 2000),
327 -1000 + qRound(area.y() * 2000),
328 qRound(area.width() * 2000),
329 qRound(area.height() * 2000))
330 .intersected(QRect(-1000, -1000, 2000, 2000));
331}
332
333void QAndroidCamera::setCameraFocusArea()
334{
335 if (!m_cameraSession)
336 return;
337
338 QList<QRect> areas;
340 if (QRectF(0., 0., 1., 1.).contains(focusPoint)) {
341 // in FocusPointAuto mode, leave the area list empty
342 // to let the driver choose the focus point.
343 QSize viewportSize = m_cameraSession->camera()->previewSize();
344
345 if (!viewportSize.isValid())
346 return;
347
348 // Set up a 50x50 pixel focus area around the focal point
349 QSizeF focusSize(50.f / viewportSize.width(), 50.f / viewportSize.height());
350 float x = qBound(qreal(0),
351 focusPoint.x() - (focusSize.width() / 2),
352 1.f - focusSize.width());
353 float y = qBound(qreal(0),
354 focusPoint.y() - (focusSize.height() / 2),
355 1.f - focusSize.height());
356
357 QRectF area(QPointF(x, y), focusSize);
358
359 areas.append(adjustedArea(area));
360 }
361 m_cameraSession->camera()->setFocusAreas(areas);
362}
363
364void QAndroidCamera::zoomTo(float factor, float rate)
365{
366 Q_UNUSED(rate);
367
368 if (zoomFactor() == factor)
369 return;
370
371 if (!m_cameraSession || !m_cameraSession->camera())
372 return;
373
374 factor = qBound(qreal(1), factor, maxZoomFactor());
375 int validZoomIndex = qt_findClosestValue(m_zoomRatios, qRound(factor * 100));
376 float newZoom = m_zoomRatios.at(validZoomIndex) / qreal(100);
377 m_cameraSession->camera()->setZoom(validZoomIndex);
378 zoomFactorChanged(newZoom);
379}
380
382{
383 if (!m_cameraSession || !m_cameraSession->camera())
384 return;
385
387 return;
388
391 flashMode = QLatin1String("auto");
392 else if (mode == QCamera::FlashOn)
393 flashMode = QLatin1String("on");
394 else // FlashOff
395 flashMode = QLatin1String("off");
396
397 m_cameraSession->camera()->setFlashMode(flashMode);
399}
400
402{
403 if (!m_cameraSession || !m_cameraSession->camera())
404 return false;
405 switch (mode) {
407 return true;
408 case QCamera::FlashOn:
409 return isFlashSupported;
411 return isFlashAutoSupported;
412 }
413}
414
416{
417 // Android doesn't have an API for that
418 return true;
419}
420
422{
423 if (!m_cameraSession)
424 return;
425 auto *camera = m_cameraSession->camera();
426 if (!camera || !isTorchSupported || mode == QCamera::TorchAuto)
427 return;
428
429 if (mode == QCamera::TorchOn) {
431 } else if (mode == QCamera::TorchOff) {
432 // if torch was enabled, it first needs to be turned off before restoring the flash mode
435 }
437}
438
440{
441 if (!m_cameraSession || !m_cameraSession->camera())
442 return false;
443 switch (mode) {
445 return true;
446 case QCamera::TorchOn:
447 return isTorchSupported;
449 return false;
450 }
451}
452
454{
455 if (exposureMode() == mode)
456 return;
457
458 if (!m_cameraSession || !m_cameraSession->camera())
459 return;
460
461 if (!m_supportedExposureModes.contains(mode))
462 return;
463
464 QString sceneMode;
465 switch (mode) {
467 sceneMode = QLatin1String("auto");
468 break;
470 sceneMode = QLatin1String("sports");
471 break;
473 sceneMode = QLatin1String("portrait");
474 break;
476 sceneMode = QLatin1String("beach");
477 break;
479 sceneMode = QLatin1String("snow");
480 break;
482 sceneMode = QLatin1String("night");
483 break;
485 sceneMode = QLatin1String("action");
486 break;
488 sceneMode = QLatin1String("landscape");
489 break;
491 sceneMode = QLatin1String("night-portrait");
492 break;
494 sceneMode = QLatin1String("theatre");
495 break;
497 sceneMode = QLatin1String("sunset");
498 break;
500 sceneMode = QLatin1String("steadyphoto");
501 break;
503 sceneMode = QLatin1String("fireworks");
504 break;
506 sceneMode = QLatin1String("party");
507 break;
509 sceneMode = QLatin1String("candlelight");
510 break;
512 sceneMode = QLatin1String("barcode");
513 break;
514 default:
515 sceneMode = QLatin1String("auto");
517 break;
518 }
519
520 m_cameraSession->camera()->setSceneMode(sceneMode);
522}
523
525{
526 return m_supportedExposureModes.contains(mode);
527}
528
530{
531 if (exposureCompensation() == bias || !m_cameraSession || !m_cameraSession->camera())
532 return;
533
534 int biasIndex = qRound(bias / m_exposureCompensationStep);
535 biasIndex = qBound(m_minExposureCompensationIndex, biasIndex, m_maxExposureCompensationIndex);
536 float comp = biasIndex * m_exposureCompensationStep;
537 m_cameraSession->camera()->setExposureCompensation(biasIndex);
539}
540
542{
543 return m_supportedWhiteBalanceModes.contains(mode);
544}
545
547{
548 if (!m_cameraSession)
549 return;
550 auto *camera = m_cameraSession->camera();
551 if (!camera)
552 return;
553 QString wb = m_supportedWhiteBalanceModes.value(mode, QString());
554 if (!wb.isEmpty()) {
555 camera->setWhiteBalance(wb);
557 }
558}
559
561
562#include "moc_qandroidcamera_p.cpp"
static QRect adjustedArea(const QRectF &area)
void setFlashMode(const QString &value)
void setExposureCompensation(int value)
float getExposureCompensationStep()
void setFocusAreas(const QList< QRect > &areas)
QStringList getSupportedFocusModes()
void previewSizeChanged()
QStringList getSupportedSceneModes()
void setSceneMode(const QString &value)
void setFocusMode(const QString &value)
QSize previewSize() const
QStringList getSupportedWhiteBalance()
int getMinExposureCompensation()
int getMaxExposureCompensation()
QStringList getSupportedFlashModes()
QList< int > getZoomRatios()
void setZoom(int value)
void error(int error, const QString &errorString)
void setCameraFormat(const QCameraFormat &format)
void activeChanged(bool)
void setSelectedCameraId(int cameraId)
AndroidCamera * camera() const
void setCaptureSession(QPlatformMediaCaptureSession *session) override
void setExposureCompensation(float bias) override
void setFocusMode(QCamera::FocusMode mode) override
void setExposureMode(QCamera::ExposureMode mode) override
bool isTorchModeSupported(QCamera::TorchMode mode) const override
QAndroidCamera(QCamera *camera)
void setFlashMode(QCamera::FlashMode mode) override
bool isWhiteBalanceModeSupported(QCamera::WhiteBalanceMode mode) const override
void zoomTo(float factor, float rate) override
void setCamera(const QCameraDevice &camera) override
bool isFocusModeSupported(QCamera::FocusMode mode) const override
bool setCameraFormat(const QCameraFormat &format) override
bool isFlashReady() const override
void setWhiteBalanceMode(QCamera::WhiteBalanceMode mode) override
bool isFlashModeSupported(QCamera::FlashMode mode) const override
virtual ~QAndroidCamera()
void setActive(bool active) override
bool isActive() const override
bool isExposureModeSupported(QCamera::ExposureMode mode) const override
void setTorchMode(QCamera::TorchMode mode) override
QMediaRecorder::RecorderState state() const
QAndroidCaptureSession * captureSession() const
QAndroidCameraSession * cameraSession() const
The QCameraDevice class provides general information about camera devices.
The QCameraFormat class describes a video format supported by a camera device. \inmodule QtMultimedia...
bool isNull() const noexcept
Returns true if this is a default constructed QCameraFormat.
The QCamera class provides interface for system camera devices.
Definition qcamera.h:28
WhiteBalanceMode
\value WhiteBalanceAuto Auto white balance mode.
Definition qcamera.h:112
@ WhiteBalanceShade
Definition qcamera.h:117
@ WhiteBalanceCloudy
Definition qcamera.h:116
@ WhiteBalanceSunset
Definition qcamera.h:121
@ WhiteBalanceSunlight
Definition qcamera.h:115
@ WhiteBalanceFlash
Definition qcamera.h:120
@ WhiteBalanceTungsten
Definition qcamera.h:118
@ WhiteBalanceFluorescent
Definition qcamera.h:119
@ WhiteBalanceAuto
Definition qcamera.h:113
TorchMode
\value TorchOff Torch is Off.
Definition qcamera.h:84
@ TorchOn
Definition qcamera.h:86
@ TorchAuto
Definition qcamera.h:87
@ TorchOff
Definition qcamera.h:85
void setFlashMode(FlashMode mode)
Definition qcamera.cpp:826
FocusMode
\value FocusModeAuto Continuous auto focus mode.
Definition qcamera.h:67
@ FocusModeAutoNear
Definition qcamera.h:69
@ FocusModeInfinity
Definition qcamera.h:72
@ FocusModeAutoFar
Definition qcamera.h:70
@ FocusModeAuto
Definition qcamera.h:68
@ FocusModeManual
Definition qcamera.h:73
@ FocusModeHyperfocal
Definition qcamera.h:71
FlashMode
\value FlashOff Flash is Off.
Definition qcamera.h:77
@ FlashAuto
Definition qcamera.h:80
@ FlashOn
Definition qcamera.h:79
@ FlashOff
Definition qcamera.h:78
ExposureMode
\value ExposureAuto Automatic mode.
Definition qcamera.h:91
@ ExposureCandlelight
Definition qcamera.h:107
@ ExposureLandscape
Definition qcamera.h:100
@ ExposureBeach
Definition qcamera.h:98
@ ExposureSunset
Definition qcamera.h:103
@ ExposurePortrait
Definition qcamera.h:94
@ ExposureNightPortrait
Definition qcamera.h:101
@ ExposureSports
Definition qcamera.h:96
@ ExposureTheatre
Definition qcamera.h:102
@ ExposureBarcode
Definition qcamera.h:108
@ ExposureAuto
Definition qcamera.h:92
@ ExposureFireworks
Definition qcamera.h:105
@ ExposureAction
Definition qcamera.h:99
@ ExposureParty
Definition qcamera.h:106
@ ExposureSnow
Definition qcamera.h:97
@ ExposureSteadyPhoto
Definition qcamera.h:104
@ ExposureNight
Definition qcamera.h:95
T & last()
Definition qlist.h:648
const_reference at(qsizetype i) const noexcept
Definition qlist.h:446
void clear()
Definition qlist.h:434
iterator insert(const Key &key, const T &value)
Definition qmap.h:688
T value(const Key &key, const T &defaultValue=T()) const
Definition qmap.h:357
bool contains(const Key &key) const
Definition qmap.h:341
void clear()
Definition qmap.h:289
QList< QCameraDevice > videoInputs
\qmlproperty list<cameraDevice> QtMultimedia::MediaDevices::videoInputs Contains a list of cameras on...
static QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *member, Qt::ConnectionType=Qt::AutoConnection)
\threadsafe
Definition qobject.cpp:2960
void torchModeChanged(QCamera::TorchMode mode)
void focusModeChanged(QCamera::FocusMode mode)
void exposureCompensationChanged(float compensation)
void whiteBalanceModeChanged(QCamera::WhiteBalanceMode mode)
QPointF focusPoint() const
float zoomFactor() const
QPointF customFocusPoint() const
QCamera::FocusMode focusMode() const
QCamera::FlashMode flashMode() const
QCamera::ExposureMode exposureMode() const
virtual void setCustomFocusPoint(const QPointF &)
float maxZoomFactor() const
void maximumZoomFactorChanged(float)
void flashModeChanged(QCamera::FlashMode mode)
void zoomFactorChanged(float zoom)
float exposureCompensation() const
void exposureModeChanged(QCamera::ExposureMode mode)
QCamera::Error error() const
void exposureCompensationRangeChanged(float min, float max)
void activeChanged(bool)
\inmodule QtCore\reentrant
Definition qpoint.h:217
constexpr qreal x() const noexcept
Returns the x coordinate of this point.
Definition qpoint.h:343
constexpr qreal y() const noexcept
Returns the y coordinate of this point.
Definition qpoint.h:348
\inmodule QtCore\reentrant
Definition qrect.h:484
\inmodule QtCore\reentrant
Definition qrect.h:30
QRect intersected(const QRect &other) const noexcept
Definition qrect.h:415
\inmodule QtCore
Definition qsize.h:208
\inmodule QtCore
Definition qsize.h:25
constexpr int height() const noexcept
Returns the height.
Definition qsize.h:133
constexpr int width() const noexcept
Returns the width.
Definition qsize.h:130
constexpr bool isValid() const noexcept
Returns true if both the width and height is equal to or greater than 0; otherwise returns false.
Definition qsize.h:127
\inmodule QtCore
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
const QChar at(qsizetype i) const
Returns the character at the given index position in the string.
Definition qstring.h:1226
QCamera * camera
Definition camera.cpp:19
Combined button and popup list for selecting options.
QT_BEGIN_NAMESPACE int qt_findClosestValue(const QList< int > &list, int value)
int qRound(qfloat16 d) noexcept
Definition qfloat16.h:327
static int area(const QSize &s)
Definition qicon.cpp:153
#define qWarning
Definition qlogging.h:166
constexpr const T & qBound(const T &min, const T &val, const T &max)
Definition qminmax.h:44
static bool contains(const QJsonArray &haystack, unsigned needle)
Definition qopengl.cpp:116
GLint GLint GLint GLint GLint x
[0]
GLenum mode
const GLfloat * m
GLint GLsizei GLsizei GLenum format
GLint y
GLfloat bias
GLuint GLenum * rate
constexpr std::array< FocusModeMapping, 6 > focusModes
#define Q_ASSERT(cond)
Definition qrandom.cpp:47
QLatin1StringView QLatin1String
Definition qstringfwd.h:31
#define QStringLiteral(str)
#define Q_UNUSED(x)
double qreal
Definition qtypes.h:187
myObject disconnect()
[26]
bool contains(const AT &t) const noexcept
Definition qlist.h:45