Ejemplo de cámara
Muestra cómo capturar una imagen fija o grabar vídeo.

El ejemplo de cámara muestra cómo utilizar Qt Multimedia para implementar algunas funciones básicas de la Cámara para tomar imágenes fijas y grabar clips de vídeo con audio.
Ejecutar el ejemplo
Para ejecutar el ejemplo desde Qt Creatorabra el modo Welcome y seleccione el ejemplo de Examples. Para más información, consulte Qt Creator: Tutorial: Construir y ejecutar.
El ejemplo implementa una clase Camera que actúa como interfaz de nuestra cámara. Tiene una interfaz de usuario, funciones de control, valores de ajuste y un medio para definir la ubicación donde se guardará la imagen o el clip de vídeo. También almacenará los ajustes de imagen y vídeo.
La clase Cámara utiliza:
- Una instancia de QCamera, la interfaz de la clase API con el hardware.
- Una instancia de QImageCapture para tomar imágenes fijas.
- Una instancia de QMediaRecorder para grabar vídeo. También contiene el objeto de interfaz de usuario.
El constructor de la cámara
El constructor de la cámara realiza una inicialización básica de la interfaz de usuario, incluyendo la desactivación de todos los botones por defecto.
Camera::Camera() : ui(new Ui::Camera) { ui->setupUi(this); // disable all buttons by default updateCameraActive(false); readyForCapture(false); ui->recordButton->setEnabled(false); ui->pauseButton->setEnabled(false); ui->stopButton->setEnabled(false); ui->metaDataButton->setEnabled(false);
Busca permisos para el acceso al dispositivo de entrada:
#if QT_CONFIG(permissions) // cámara QCameraPermission cameraPermission; switch (qApp->checkPermission(cameraPermission)) { case Qt::PermissionStatus::Indeterminado: qApp->requestPermission(cameraPermission, this, &Camera::init); return; case Qt::PermissionStatus::Denied: qWarning("Camera permission is not granted!"); return; case Qt::PermissionStatus::Granted: break; } // micrófono QMicrophonePermission microphonePermission; switch (qApp->checkPermission(microphonePermission)) { case Qt::PermissionStatus::Indeterminado: qApp->requestPermission(microphonePermission, this, &Camera::init); return; case Qt::PermissionStatus::Denied: qWarning("Microphone permission is not granted!"); return; case Qt::PermissionStatus::Granted: break; }#endif
Se asignan las entradas:
m_audioInput.reset(new QAudioInput); m_captureSession.setAudioInput(m_audioInput.get()); // Camera devices: videoDevicesGroup = new QActionGroup(this); videoDevicesGroup->setExclusive(true); updateCameras();
Las señales UI se conectan a las ranuras que reaccionan al evento desencadenante:
connect(&m_devices, &QMediaDevices::videoInputsChanged, this, &Camera::updateCameras); connect(videoDevicesGroup, &QActionGroup::triggered, this, &Camera::updateCameraDevice); connect(ui->captureWidget, &QTabWidget::currentChanged, this, &Camera::updateCaptureMode); connect(ui->metaDataButton, &QPushButton::clicked, this, &Camera::showMetaDataDialog); setCamera(QMediaDevices::defaultVideoInput());
Sin embargo, la mayor parte del trabajo se realiza cuando se llama a la función setCamera(), pasándole un QCameraDevice.
setCamera()
setCamera() establece varias conexiones entre la interfaz de usuario y la funcionalidad de la clase Camera utilizando señales y ranuras. También instanciará e inicializará los objetos QCamera, QImageCapture, y QMediaRecorder.
void Camera::setCamera(const QCameraDevice &cameraDevice) { m_camera.reset(new QCamera(cameraDevice)); m_captureSession.setCamera(m_camera.get()); connect(m_camera.get(), &QCamera::activeChanged, this, &Camera::updateCameraActive); connect(m_camera.get(), &QCamera::errorOccurred, this, &Camera::displayCameraError); if (!m_mediaRecorder) { m_mediaRecorder.reset(new QMediaRecorder); m_captureSession.setRecorder(m_mediaRecorder.get()); connect(m_mediaRecorder.get(), &QMediaRecorder::recorderStateChanged, this, &Camera::updateRecorderState); connect(m_mediaRecorder.get(), &QMediaRecorder::durationChanged, this, &Camera::updateRecordTime); connect(m_mediaRecorder.get(), &QMediaRecorder::errorChanged, this, &Camera::displayRecorderError); } if (!m_imageCapture) { m_imageCapture.reset(new QImageCapture); m_captureSession.setImageCapture(m_imageCapture.get()); connect(m_imageCapture.get(), &QImageCapture::readyForCaptureChanged, this, &Camera::readyForCapture); connect(m_imageCapture.get(), &QImageCapture::imageCaptured, this, &Camera::processCapturedImage); connect(m_imageCapture.get(), &QImageCapture::imageSaved, this, &Camera::imageSaved); connect(m_imageCapture.get(), &QImageCapture::errorOccurred, this, &Camera::displayCaptureError); }
Se activan las pestañas visuales de grabación de imágenes fijas y de vídeo:
m_captureSession.setVideoOutput(ui->viewfinder); updateCameraActive(m_camera->isActive()); updateRecorderState(m_mediaRecorder->recorderState()); readyForCapture(m_imageCapture->isReadyForCapture()); updateCaptureMode();
Por último, se llama a la función start() del objeto QCamera.
m_camera->start();
Activación de la captura
Ahora que la cámara está lista para recibir órdenes del usuario, espera un evento adecuado. Dicho evento puede ser una pulsación de los botones Qt::Key_CameraFocus o Qt::Key_Camera en la ventana de la aplicación.
Key_CameraFocus simplemente mostrará la vista previa y bloqueará los ajustes de la cámara.
} void Camera::keyPressEvent(QKeyEvent *event) { if (event->isAutoRepeat()) return; switch (event->key()) { case Qt::Key_CameraFocus: displayViewfinder(); event->accept(); break;
Key_Camera llamará a takeImage() si está haciendo una captura de imagen, o llamará a record() o stop() (si ya está grabando) en la instancia QMediaRecorder cuando esté grabando vídeo.
case Qt::Key_Camera: if (m_doImageCapture) { takeImage(); } else { if (m_mediaRecorder->recorderState() == QMediaRecorder::RecordingState) stop(); else record(); } event->accept(); break;
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. 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.