En esta página

QMediaRecorder Class

La clase QMediaRecorder se utiliza para codificar y grabar una sesión de captura. Más...

Cabecera: #include <QMediaRecorder>
CMake: find_package(Qt6 REQUIRED COMPONENTS Multimedia)
target_link_libraries(mytarget PRIVATE Qt6::Multimedia)
qmake: QT += multimedia
En QML: MediaRecorder
Hereda: QObject

Tipos públicos

enum EncodingMode { ConstantQualityEncoding, ConstantBitRateEncoding, AverageBitRateEncoding, TwoPassEncoding }
enum Error { NoError, ResourceError, FormatError, OutOfSpaceError, LocationNotWritable }
enum Quality { VeryLowQuality, LowQuality, NormalQuality, HighQuality, VeryHighQuality }
enum RecorderState { StoppedState, RecordingState, PausedState }

Propiedades

Funciones públicas

QMediaRecorder(QObject *parent = nullptr)
virtual ~QMediaRecorder() override
QUrl actualLocation() const
void addMetaData(const QMediaMetaData &metaData)
int audioBitRate() const
int audioChannelCount() const
int audioSampleRate() const
bool autoStop() const
QMediaCaptureSession *captureSession() const
qint64 duration() const
QMediaRecorder::EncodingMode encodingMode() const
QMediaRecorder::Error error() const
QString errorString() const
bool isAvailable() const
QMediaFormat mediaFormat() const
QMediaMetaData metaData() const
QIODevice *outputDevice() const
QUrl outputLocation() const
QMediaRecorder::Quality quality() const
QMediaRecorder::RecorderState recorderState() const
void setAudioBitRate(int bitRate)
void setAudioChannelCount(int channels)
void setAudioSampleRate(int sampleRate)
void setAutoStop(bool autoStop)
void setEncodingMode(QMediaRecorder::EncodingMode mode)
void setMediaFormat(const QMediaFormat &format)
void setMetaData(const QMediaMetaData &metaData)
void setOutputDevice(QIODevice *device)
void setOutputLocation(const QUrl &location)
void setQuality(QMediaRecorder::Quality quality)
void setVideoBitRate(int bitRate)
void setVideoFrameRate(qreal frameRate)
void setVideoResolution(const QSize &size)
void setVideoResolution(int width, int height)
int videoBitRate() const
qreal videoFrameRate() const
QSize videoResolution() const

Ranuras públicas

void pause()
void record()
void stop()

Señales

void actualLocationChanged(const QUrl &location)
void audioBitRateChanged()
void audioChannelCountChanged()
void audioSampleRateChanged()
void autoStopChanged()
void durationChanged(qint64 duration)
void encodingModeChanged()
void errorChanged()
void errorOccurred(QMediaRecorder::Error error, const QString &errorString)
void mediaFormatChanged()
void metaDataChanged()
void qualityChanged()
void recorderStateChanged(QMediaRecorder::RecorderState state)
void videoBitRateChanged()
void videoFrameRateChanged()
void videoResolutionChanged()

Descripción Detallada

Utilice la clase QMediaRecorder para codificar y grabar medios generados en QMediaCaptureSession. Puede generar:

Para grabar medios, conecte un generador a una sesión de captura de medios correspondiente.

El rendimiento de la codificación y grabación de vídeo está limitado por el hardware, el sistema operativo, los controladores gráficos instalados y el formato de vídeo de entrada. Si QCamera, QScreenCapture, o QWindowCapture producen fotogramas de vídeo más rápido de lo que QMediaRecorder puede codificarlos y grabarlos, la grabadora puede omitir algunos fotogramas. Es probable que esto ocurra si la resolución de los fotogramas de entrada es alta, 4K por ejemplo, y la codificación acelerada por hardware no está disponible. Si generas vídeo de entrada a través de QVideoFrameInput, el método QVideoFrameInput::sendVideoFrame no hará nada y devolverá false siempre que se alcance esta limitación y la cola interna de fotogramas esté llena. Confíe en la señal QVideoFrameInput::readyToSendVideoFrame para saber cuándo la grabadora está lista para volver a recibir nuevos fotogramas. Si no puede cambiar la velocidad de generación de fotogramas de vídeo y no desea perder fotogramas, le recomendamos que implemente su propia cola de fotogramas sobre QVideoFrameInput, teniendo en cuenta las limitaciones de memoria del hardware.

QMediaCaptureSession session;
QAudioInput audioInput;
session.setAudioInput(&input);
QMediaRecorder recorder;
session.setRecorder(&recorder);
recorder.setQuality(QMediaRecorder::HighQuality);
recorder.setOutputLocation(QUrl::fromLocalFile("test.mp3"));
recorder.record();

Documentación del tipo de miembro

enum QMediaRecorder::EncodingMode

Enumera los modos de codificación.

ConstanteValorDescripción
QMediaRecorder::ConstantQualityEncoding0La codificación intentará tener una calidad constante, ajustando la tasa de bits para adaptarse.
QMediaRecorder::ConstantBitRateEncoding1La codificación utilizará una tasa de bits constante y ajustará la calidad en función de la misma.
QMediaRecorder::AverageBitRateEncoding2La codificación intentará mantener una tasa de bits media, pero utilizará más o menos según sea necesario.
QMediaRecorder::TwoPassEncoding3El soporte se procesará primero para determinar las características y, a continuación, se procesará una segunda vez asignando más bits a las zonas que lo necesiten.

enum QMediaRecorder::Error

ConstanteValorDescripción
QMediaRecorder::NoError0Sin errores.
QMediaRecorder::ResourceError1El dispositivo no está listo o no está disponible.
QMediaRecorder::FormatError2El formato actual no es compatible.
QMediaRecorder::OutOfSpaceError3No queda espacio en el dispositivo.
QMediaRecorder::LocationNotWritable4No se puede escribir en la ubicación de salida.

enum QMediaRecorder::Quality

Enumera los niveles de codificación de la calidad.

ConstanteValor
QMediaRecorder::VeryLowQuality0
QMediaRecorder::LowQuality1
QMediaRecorder::NormalQuality2
QMediaRecorder::HighQuality3
QMediaRecorder::VeryHighQuality4

enum QMediaRecorder::RecorderState

ConstanteValorDescripción
QMediaRecorder::StoppedState0La grabadora no está activa.
QMediaRecorder::RecordingState1La grabación está solicitada.
QMediaRecorder::PausedState2La grabadora está en pausa.

Propiedad Documentación

[read-only] actualLocation : QUrl

Esta propiedad contiene la ubicación real del último contenido multimedia.

La ubicación real se restablece cuando se asigna un nuevo outputLocation o un outputDevice no nulo. Cuando se invoca record() y outputDevice es null o no es escribible, la grabadora genera la ubicación real basándose en las siguientes reglas.

  • Si outputLocation está vacío, es un directorio o un archivo sin extensión, la grabadora genera la extensión apropiada basándose en el formato de soporte seleccionado y en los tipos MIME del sistema.
  • Si outputLocation es un directorio, la grabadora genera un nuevo nombre de archivo dentro de él.
  • Si outputLocation está vacío, la grabadora genera un nuevo nombre de archivo en el directorio específico del sistema para audio o vídeo.
  • La grabadora genera la ubicación real antes de emitir recorderStateChanged(RecordingState).

Funciones de acceso:

QUrl actualLocation() const

Señal notificadora:

void actualLocationChanged(const QUrl &location)

audioBitRate : int

Esta propiedad contiene la tasa de bits del flujo de audio comprimido en bits por segundo.

Funciones de acceso:

int audioBitRate() const
void setAudioBitRate(int bitRate)

Señal notificadora:

audioChannelCount : int

Esta propiedad contiene el número de canales de audio.

Funciones de acceso:

int audioChannelCount() const
void setAudioChannelCount(int channels)

Señal del notificador:

audioSampleRate : int

Esta propiedad contiene la frecuencia de muestreo de audio en Hz.

Funciones de acceso:

int audioSampleRate() const
void setAudioSampleRate(int sampleRate)

Señal del notificador:

autoStop : bool

Esta propiedad controla si la grabadora de medios se detiene automáticamente cuando todas las entradas de medios han informado del final del flujo o se han desactivado.

El final del flujo se notifica enviando un fotograma multimedia vacío, que se puede enviar explícitamente a través de QVideoFrameInput o QAudioBufferInput.

Las entradas de vídeo, concretamente QCamera, QScreenCapture y QWindowCapture, pueden desactivarse mediante la función setActive.

Por defecto false.

QMediaRecorder::autoStop sólo es compatible con el backend FFmpeg.

Funciones de acceso:

bool autoStop() const
void setAutoStop(bool autoStop)

Señal Notifier:

void autoStopChanged()

Véase también QCamera, QScreenCapture, y QWindowCapture.

[read-only] duration : qint64

Esta propiedad contiene la duración del medio grabado en milisegundos.

Funciones de acceso:

qint64 duration() const

Señal del notificador:

void durationChanged(qint64 duration)

encodingMode : QMediaRecorder::EncodingMode

Esta propiedad contiene el modo de codificación.

Funciones de acceso:

QMediaRecorder::EncodingMode encodingMode() const
void setEncodingMode(QMediaRecorder::EncodingMode mode)

Señal del notificador:

Véase también EncodingMode.

[read-only] error : QMediaRecorder::Error

Devuelve el estado de error actual.

Funciones de acceso:

QMediaRecorder::Error error() const

Señal del notificador:

void errorChanged()

Véase también errorString().

[read-only] errorString : QString

Devuelve una cadena que describe el estado de error actual.

Funciones de acceso:

QString errorString() const

Señal del notificador:

void errorChanged()

Véase también error().

mediaFormat : QMediaFormat

Esta propiedad contiene el QMediaFormat actual de la grabadora.

El valor de esta propiedad puede cambiar al invocar record(). Si esto ocurre, se emitirá la señal mediaFormatChanged(). Esto ocurrirá siempre que las propiedades QMediaFormat::audioCodec o QMediaFormat::fileFormat estén establecidas como no especificadas. Si una fuente de vídeo (QCamera, QScreenCapture, o QVideoFrameInput) está conectada a QMediaCaptureSession, también debe especificarse QMediaFormat::videoCodec. Los valores de las propiedades QMediaFormat::audioCodec y QMediaFormat::videoCodec también pueden cambiar si el backend multimedia no admite el formato de archivo o códec seleccionado.

El valor de la propiedad QMediaFormat::fileFormat también puede cambiar a un formato sólo audio si se solicitó un formato de vídeo, pero QMediaCaptureSession no tiene una fuente de vídeo conectada. Por ejemplo, si QMediaFormat::fileFormat está configurado como QMediaFormat::MPEG4, puede cambiar a QMediaFormat::Mpeg4Audio.

Las aplicaciones pueden determinar si mediaFormat cambiará antes de que comience la grabación llamando a la función QMediaFormat::isSupported(). Cuando se graba sin ninguna entrada de vídeo, record() no cambiará a QMediaFormat si se cumple lo siguiente

Cuando se graba con entrada de vídeo, mediaFormat no se modificará si lo siguiente es cierto

Nota: QMediaRecorder no tiene en cuenta la extensión del nombre de archivo de la propiedad outputLocation a la hora de determinar QMediaFormat::fileFormat, y no ajustará la extensión de outputLocation QUrl para que coincida con el formato de archivo seleccionado si se especifica una extensión. Por lo tanto, las aplicaciones deben asegurarse de ajustar QMediaRecorder::mediaFormat::fileFormat para que coincida con la extensión del archivo, o no especificar una extensión de archivo. Si no se especifica ninguna extensión de archivo, la extensión del archivo actualLocation se actualizará para que coincida con el formato de archivo utilizado para la grabación.

Funciones de acceso:

QMediaFormat mediaFormat() const
void setMediaFormat(const QMediaFormat &format)

Señal del notificador:

void mediaFormatChanged()

Véase también QMediaFormat::isSupported() y actualLocation.

metaData : QMediaMetaData

Devuelve los metadatos asociados a la grabación.

Funciones de acceso:

QMediaMetaData metaData() const
void setMetaData(const QMediaMetaData &metaData)

Señal del notificador:

outputLocation : QUrl

Esta propiedad contiene la ubicación de destino del contenido multimedia.

Establecer la ubicación puede fallar, por ejemplo, cuando el servicio sólo admite ubicaciones de sistemas de archivos locales pero se ha pasado una URL de red. Si la operación falla, se emite la señal errorOccurred().

La ubicación de salida se ignora si se ha asignado al grabador un outputDevice con permisos de escritura. Este comportamiento puede cambiar en el futuro, por lo que recomendamos establecer sólo una salida, ya sea outputLocation o outputDevice.

La ubicación de salida puede estar vacía, ser un directorio o un archivo. La ruta a un directorio o archivo puede ser relativa o absoluta. El método record() genera la ubicación real de acuerdo con la ubicación de salida especificada y la configuración específica del sistema. Consulte la descripción de la propiedad actualLocation para más detalles.

Funciones de acceso:

QUrl outputLocation() const
void setOutputLocation(const QUrl &location)

Véase también actualLocation y outputDevice().

quality : Quality

Devuelve la calidad de grabación.

Funciones de acceso:

QMediaRecorder::Quality quality() const
void setQuality(QMediaRecorder::Quality quality)

Señal de aviso:

[read-only] recorderState : QMediaRecorder::RecorderState

Esta propiedad contiene el estado actual de la grabadora multimedia.

La propiedad state representa la solicitud del usuario y se cambia de forma sincrónica durante las llamadas a record(), pause() o stop(). El estado de la grabadora también puede cambiar de forma asíncrona cuando falla la grabación.

Funciones de acceso:

QMediaRecorder::RecorderState recorderState() const

Señal del notificador:

void recorderStateChanged(QMediaRecorder::RecorderState state)

[since 6.6] videoBitRate : int

Esta propiedad contiene la tasa de bits del flujo de vídeo comprimido en bits por segundo.

Esta propiedad se introdujo en Qt 6.6.

Funciones de acceso:

int videoBitRate() const
void setVideoBitRate(int bitRate)

Señal notificadora:

[since 6.6] videoFrameRate : qreal

Esta propiedad contiene la velocidad de fotogramas de vídeo.

Un valor de 0 indica que la grabadora debe hacer una elección óptima basada en lo que está disponible en la fuente de vídeo y las limitaciones del códec.

Esta propiedad se introdujo en Qt 6.6.

Funciones de acceso:

qreal videoFrameRate() const
void setVideoFrameRate(qreal frameRate)

Notificador de señal:

[since 6.6] videoResolution : QSize

Esta propiedad contiene la resolución del vídeo codificado.

Un QSize vacío indica que la grabadora elegirá una resolución óptima basada en lo que esté disponible en la fuente de vídeo y en las limitaciones del códec.

Esta propiedad se introdujo en Qt 6.6.

Funciones de acceso:

QSize videoResolution() const
void setVideoResolution(const QSize &size)
void setVideoResolution(int width, int height)

Notifier signal:

Documentación de funciones miembro

QMediaRecorder::QMediaRecorder(QObject *parent = nullptr)

Construye un grabador multimedia. La grabadora multimedia es hija de parent.

[override virtual noexcept] QMediaRecorder::~QMediaRecorder()

Destruye un objeto grabador multimedia.

[signal] void QMediaRecorder::actualLocationChanged(const QUrl &location)

Señala que la dirección location real del soporte grabado ha cambiado. Esta señal se emite normalmente cuando se inicia la grabación.

Nota: Señal notificadora para la propiedad actualLocation.

void QMediaRecorder::addMetaData(const QMediaMetaData &metaData)

Añade metaData al soporte grabado.

int QMediaRecorder::audioBitRate() const

Devuelve la tasa de bits del flujo de audio comprimido en bits por segundo.

Nota: Función Getter para la propiedad audioBitRate.

Véase también setAudioBitRate().

[signal] void QMediaRecorder::audioBitRateChanged()

Señala cuando cambia la tasa de bits de audio de la grabación.

Nota: Señal notificadora para la propiedad audioBitRate.

int QMediaRecorder::audioChannelCount() const

Devuelve el número de canales de audio.

Nota: Función Getter para la propiedad audioChannelCount.

Véase también setAudioChannelCount().

[signal] void QMediaRecorder::audioChannelCountChanged()

Señala cuando cambia el recuento de canales de audio de grabación.

Nota: Señal notificadora para la propiedad audioChannelCount.

int QMediaRecorder::audioSampleRate() const

Devuelve la frecuencia de muestreo de audio en Hz.

Nota: Función Getter para la propiedad audioSampleRate.

Véase también setAudioSampleRate().

[signal] void QMediaRecorder::audioSampleRateChanged()

Señala cuando cambia la frecuencia de muestreo del audio de grabación.

Nota: Señal notificadora para la propiedad audioSampleRate.

QMediaCaptureSession *QMediaRecorder::captureSession() const

Devuelve la sesión de captura de medios.

[signal] void QMediaRecorder::durationChanged(qint64 duration)

Señala que el duration del soporte grabado ha cambiado.

Nota: Señal notificadora para la propiedad duration.

QMediaRecorder::EncodingMode QMediaRecorder::encodingMode() const

Devuelve el modo de codificación.

Nota: Función Getter para la propiedad encodingMode.

Véase también setEncodingMode() y EncodingMode.

[signal] void QMediaRecorder::encodingModeChanged()

Señala cuando cambia el modo de codificación.

Nota: Señal notificadora para la propiedad encodingMode.

[signal] void QMediaRecorder::errorOccurred(QMediaRecorder::Error error, const QString &errorString)

Señala que se ha producido un error, con errorString que contiene una descripción del error.

bool QMediaRecorder::isAvailable() const

Devuelve true si el servicio de grabadora multimedia está listo para su uso.

[signal] void QMediaRecorder::metaDataChanged()

Señala que los metadatos de un objeto multimedia han cambiado.

Si se modifican varios elementos de metadatos, metaDataChanged() se emite una vez.

Nota: Señal notificadora para la propiedad metaData.

QIODevice *QMediaRecorder::outputDevice() const

Devuelve el dispositivo IO de salida para el contenido multimedia.

Véase también setOutputDevice().

[slot] void QMediaRecorder::pause()

Pone en pausa la grabación.

El estado de la grabadora cambia a QMediaRecorder::PausedState.

Dependiendo de la plataforma, puede que no sea posible pausar la grabación. En este caso, el estado de la grabadora no cambia.

[signal] void QMediaRecorder::qualityChanged()

Señala cuando cambia la calidad de grabación.

Nota: Señal de aviso para la propiedad quality.

[slot] void QMediaRecorder::record()

Inicia la grabación.

Aunque el estado de la grabadora cambia inmediatamente a c{QMediaRecorder::RecordingState}, la grabación puede comenzar de forma asíncrona.

Si la grabación falla, se emite la señal error() y el estado de la grabadora se restablece a QMediaRecorder::StoppedState.

Este método actualiza actualLocation según sus reglas de generación.

Nota: En los dispositivos móviles, la grabación se realizará en la orientación que tenía el dispositivo cuando se llamó a grabar y se bloqueará mientras dure la grabación. Para evitar artefactos en la interfaz de usuario, recomendamos mantener la interfaz de usuario bloqueada en la misma orientación mientras dure la grabación utilizando la propiedad contentOrientation de QWindow y desbloquearla de nuevo una vez finalizada la grabación.

QMediaRecorder::RecorderState QMediaRecorder::recorderState() const

Devuelve el estado actual de la grabadora multimedia.

Nota: Función Getter para la propiedad recorderState.

Véase también QMediaRecorder::RecorderState.

[signal] void QMediaRecorder::recorderStateChanged(QMediaRecorder::RecorderState state)

Señala que la dirección state de una grabadora multimedia ha cambiado.

Nota: Señal notificadora para la propiedad recorderState.

void QMediaRecorder::setAudioBitRate(int bitRate)

Establece el audio bitRate en bits por segundo.

Nota: Función Setter para la propiedad audioBitRate.

Véase también audioBitRate().

void QMediaRecorder::setAudioChannelCount(int channels)

Establece el número de audio channels.

Un valor de -1 indica que la grabadora debe hacer una elección óptima basada en lo que está disponible en la fuente de audio y las limitaciones del códec.

Nota: Función Setter para la propiedad audioChannelCount.

Véase también audioChannelCount().

void QMediaRecorder::setAudioSampleRate(int sampleRate)

Establece el audio sampleRate en Hz.

Un valor de -1 indica que la grabadora debe hacer una elección óptima basada en lo que está disponible de la fuente de audio, y las limitaciones del códec.

Nota: Función Setter para la propiedad audioSampleRate.

Véase también audioSampleRate().

void QMediaRecorder::setEncodingMode(QMediaRecorder::EncodingMode mode)

Establece el parámetro de codificación mode.

Si ConstantQualityEncoding está establecido, se utiliza el parámetro de codificación de calidad y se ignoran las tasas de bits; en caso contrario, se utilizan las tasas de bits.

Nota: Función Setter para la propiedad encodingMode.

Véase también encodingMode() y EncodingMode.

void QMediaRecorder::setMetaData(const QMediaMetaData &metaData)

Establece los metadatos en metaData.

Nota: Para garantizar que los metadatos se configuran correctamente, deben configurarse antes de iniciar la grabación. Una vez iniciada la grabación, los metadatos establecidos se adjuntarán a la siguiente grabación.

Nota: Función Setter para la propiedad metaData.

Véase también metaData().

void QMediaRecorder::setOutputDevice(QIODevice *device)

Establezca el dispositivo IO de salida para el contenido multimedia.

El device debe haber sido abierto en los modos WriteOnly o ReadWrite antes de que comience la grabación.

El grabador multimedia no se apropia del device especificado. Si se ha iniciado la grabación, el dispositivo debe mantenerse vivo y abierto hasta que se emita la señal recorderStateChanged(StoppedState).

Este método reinicia actualLocation inmediatamente a menos que el device especificado sea null.

Si se asigna a la grabadora un dispositivo de salida con capacidad de escritura, se ignora outputLocation y no se genera actualLocation cuando se inicia la grabación. Este comportamiento puede cambiar en el futuro, por lo que recomendamos configurar sólo una salida, ya sea outputLocation o outputDevice.

QMediaRecorder::setOutputDevice sólo es compatible con el backend FFmpeg.

Véase también outputDevice() y outputLocation.

void QMediaRecorder::setVideoBitRate(int bitRate)

Establece el vídeo bitRate en bits por segundo.

Nota: Función setter para la propiedad videoBitRate.

Véase también videoBitRate().

void QMediaRecorder::setVideoFrameRate(qreal frameRate)

Establece el vídeo frameRate.

Un valor de 0 indica que la grabadora debe hacer una elección óptima basada en lo que está disponible en la fuente de vídeo y las limitaciones del códec.

Nota: Función Setter para la propiedad videoFrameRate.

Véase también videoFrameRate().

void QMediaRecorder::setVideoResolution(const QSize &size)

Establece la resolución del vídeo codificado en size.

Pase un QSize vacío para que el grabador elija una resolución óptima basada en lo que está disponible en la fuente de vídeo y las limitaciones del códec.

Nota: Función Setter para la propiedad videoResolution.

Véase también videoResolution().

void QMediaRecorder::setVideoResolution(int width, int height)

Establece las propiedades width y height de la resolución del vídeo codificado.

Nota: Función Setter para la propiedad videoResolution.

Se trata de una función sobrecargada.

[slot] void QMediaRecorder::stop()

La grabadora detendrá la grabación. Sin embargo, el procesamiento de los datos de vídeo y audio pendientes puede tardar todavía algún tiempo. La grabación finaliza cuando el estado de la grabadora cambia a QMediaRecorder::StoppedState.

int QMediaRecorder::videoBitRate() const

Devuelve la tasa de bits del flujo de vídeo comprimido en bits por segundo.

Nota: Función Getter para la propiedad videoBitRate.

Véase también setVideoBitRate().

[signal] void QMediaRecorder::videoBitRateChanged()

Señala cuando cambia la tasa de bits de vídeo de grabación.

Nota: Señal de aviso para la propiedad videoBitRate.

qreal QMediaRecorder::videoFrameRate() const

Devuelve la tasa de fotogramas del vídeo.

Nota: Función Getter para la propiedad videoFrameRate.

Véase también setVideoFrameRate().

[signal] void QMediaRecorder::videoFrameRateChanged()

Señala cuando cambia la velocidad de fotogramas del vídeo grabado.

Nota: Señal de aviso para la propiedad videoFrameRate.

QSize QMediaRecorder::videoResolution() const

Devuelve la resolución del vídeo codificado.

Nota: Función Getter para la propiedad videoResolution.

Véase también setVideoResolution().

[signal] void QMediaRecorder::videoResolutionChanged()

Señala cuando cambia la resolución de la grabación de vídeo.

Nota: Señal de aviso para la propiedad videoResolution.

© 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.