En esta página

QObject Class

La clase QObject es la clase base de todos los objetos Qt. Más...

Cabecera: #include <QObject>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
Heredado por:
292 tipos

Q3DGraphsWidgetItem, Q3DObject, Q3DScene, Q3DTheme, QAbstract3DAxis, QAbstract3DInputHandler, QAbstract3DSeries, QAbstractAnimation, QAbstractAxis, QAbstractDataProxy, QAbstractEventDispatcher, QAbstractHttpServer, QAbstractItemDelegate, QAbstractItemModel, QAbstractItemModelTester, QAbstractNetworkCache, QAbstractOAuth, QAbstractOAuthReplyHandler, QAbstractSeries, QAbstractState, QAbstractTextDocumentLayout, QAbstractTransition, QAccessibilityHints, QAccessiblePlugin, QAction, QActionGroup, QAmbientSound, QAudioBufferInput, QAudioBufferOutput, QAudioDecoder, QAudioEngine, QAudioInput, QAudioListener, QAudioOutput, QAudioRoom, QAudioSink, QAudioSource QDtlsClientVerifier, QAxBaseObject, QAxFactory, QAxScript, QAxScriptManager, QBarModelMapper, QBarSet, QBluetoothDeviceDiscoveryAgent, QBluetoothLocalDevice, QBluetoothServer, QBluetoothServiceDiscoveryAgent, QBoxSet, QButtonGroup, QCamera, QCanBus, QCanBusDevice, QCandlestickModelMapper, QCandlestickSet, QChronoTimer, QClipboard, QCoapClient, QCompleter, QCoreApplication, QCustom3DItem, QDataWidgetMapper, QDBusAbstractAdaptor, QDBusAbstractInterface, QDBusPendingCallWatcher, QDBusServer, QDBusServiceWatcher, QDBusVirtualObject, QDesignerFormEditorInterface, QDesignerFormWindowManagerInterface, QDnsLookup, QDrag, QDtls, xml-ph- QEventLoop QInputDevice, QExtensionFactory, QExtensionManager, QFileSelector, QFileSystemWatcher, QFutureWatcher, QGenericPlugin, QGeoAreaMonitorSource, QGeoCodeReply, QGeoCodingManager, QGeoCodingManagerEngine, QGeoPositionInfoSource, QGeoRouteReply, QGeoRoutingManager, QGeoRoutingManagerEngine, QGeoSatelliteInfoSource, QGeoServiceProvider, QGesture, QGraphicsAnchor, QGraphicsEffect, QGraphicsItemAnimation, QGraphicsObject, QGraphicsScene, QGraphicsTransform, QGraphsTheme, QGrpcClientBase, QGrpcOperation, QGrpcOperationContext, QHelpEngineCore, QHelpFilterEngine, QHelpSearchEngine, QHelpSearchEngineCore, QHttpMultiPart, QIconEnginePlugin, QImageCapture, QImageIOPlugin, xml-ph- QInputMethod QOpenGLContextGroup, QIODevice, QItemSelectionModel, QJSEngine, QLayout, QLegendMarker, QLibrary, QLocalServer, QLowEnergyController, QLowEnergyService, QMaskGenerator, QMediaCaptureSession, QMediaDevices, QMediaPlayer, QMediaRecorder, QMimeData, QModbusDevice, QModbusReply, QMovie, QMqttClient, QMqttSubscription, QNearFieldManager, QNearFieldTarget, QNetworkAccessManager, QNetworkCookieJar, QNetworkInformation, QObjectCleanupHandler, QOffscreenSurface, QOpcUaClient, QOpcUaGdsClient, QOpcUaGenericStructHandler, QOpcUaHistoryReadResponse, QOpcUaKeyPair, QOpcUaNode, QOpcUaProvider, QOpenGLContext, xml-ph- QOpenGLDebugLogger, QOpenGLShader, QOpenGLShaderProgram, QOpenGLTimeMonitor, QOpenGLTimerQuery, QOpenGLVertexArrayObject, QPdfDocument, QPdfPageNavigator, QPdfPageRenderer, QPdfWriter, QPieModelMapper, QPieSlice, QPlaceManager, QPlaceManagerEngine, QPlaceReply, QPluginLoader, QQmlComponent, QQmlContext, QQmlEngineExtensionPlugin, QQmlExpression, QQmlExtensionPlugin, QQmlFileSelector, QQmlImageProviderBase, QQmlPropertyMap, QQuick3DObject, QQuickAttachedPropertyPropagator, QQuickImageResponse, QQuickItem, QQuickItemGrabResult, QQuickRenderControl, QQuickTextDocument, QQuickTextureFactory, QQuickWebEngineProfile, QRemoteObjectAbstractPersistedStore, QRemoteObjectNode, QRemoteObjectPendingCallWatcher, QRemoteObjectReplica Qt3DCore::QNode, QRestAccessManager, QScreen, QScreenCapture, QScroller, QScxmlDataModel, QScxmlInvokableService, QScxmlInvokableServiceFactory, QScxmlStateMachine, QSensor, QSensorBackend, QSensorReading, QSessionManager, QSettings, QSGTexture, QSGTextureProvider, QSharedMemory, QShortcut, QSignalMapper, QSocketNotifier, QSoundEffect, QSpatialSound, QSqlDriver, QSqlDriverPlugin, QStyle, QStyleHints, QStylePlugin, QSvgRenderer, QSyntaxHighlighter, QSystemTrayIcon, Qt3DAnimation::QAbstractAnimation, Qt3DAnimation::QAnimationController, Qt3DAnimation::QAnimationGroup, Qt3DAnimation::QMorphTarget, Qt3DCore::QAbstractAspect, Qt3DCore::QAspectEngine, xml-ph- Qt3DCore::Quick::QQmlAspectEngine QVirtualKeyboardInputEngine, Qt3DInput::QKeyEvent, Qt3DInput::QMouseEvent, Qt3DInput::QWheelEvent, Qt3DRender::QGraphicsApiFilter, Qt3DRender::QPickEvent, Qt3DRender::QRenderCapabilities, Qt3DRender::QRenderCaptureReply, Qt3DRender::QStencilOperationArguments, Qt3DRender::QStencilTestArguments, Qt3DRender::QTextureWrapMode, QTcpServer, QTextDocument, QTextObject, QTextToSpeech, QThread, QThreadPool, QTimeLine, QTimer, QTranslator, QtTaskTree::QBarrier, QtTaskTree::QNetworkReplyWrapper, QtTaskTree::QTaskInterface, QtTaskTree::QTaskTree, QtTaskTree::QTcpSocketWrapper, QUiLoader, QUndoGroup, QUndoStack, QValidator, QValue3DAxisFormatter, QVideoFrameInput, QVideoSink, QVirtualKeyboardAbstractInputMethod, QVirtualKeyboardDictionary, QVirtualKeyboardDictionaryManager, QVirtualKeyboardInputContext, xml-ph- QVirtualKeyboardObserver, QVirtualKeyboardTrace, QWaylandClient, QWaylandClientExtension, QWaylandObject, QWaylandQuickShellIntegration, QWaylandSurfaceGrabber, QWaylandView, QWaylandXdgOutputV1, QWaylandXdgPopup, QWaylandXdgToplevel, QWebChannel, QWebChannelAbstractTransport, QWebEngineClientHints, QWebEngineContextMenuRequest, QWebEngineCookieStore, QWebEngineDownloadRequest, QWebEngineExtensionManager, QWebEngineHistory, QWebEngineNavigationRequest, QWebEngineNewWindowRequest, QWebEngineNotification, QWebEnginePage, QWebEngineProfile, QWebEngineUrlRequestInterceptor, QWebEngineUrlRequestJob, QWebEngineUrlSchemeHandler, QWebEngineWebAuthUxRequest, QWebSocket, QWebSocketServer, QWidget, QWindow, QWindowCapture, QWinEventNotifier, y QXYModelMapper

Nota: Todas las funciones de esta clase son reentrantes.

Nota: Estas funciones también son thread-safe:

  • connect(const QObject *remitente, const char *señal, const QObject *receptor, const char *método, Qt::ConnectionType tipo)
  • connect(const QObject *receptor, const char *señal, const char *método, Qt::ConnectionType tipo) const
  • connect(const QObject *remitente, señal PointerToMemberFunction, const QObject *receptor, método PointerToMemberFunction, tipo Qt::ConnectionType)
  • connect(const QObject *remitente, PointerToMemberFunction señal, Functor functor)
  • connect(const QObject *sender, PointerToMemberFunction signal, const QObject *context, Functor functor, Qt::ConnectionType type)
  • disconnect(const QObject *remitente, const char *señal, const QObject *receptor, const char *método)
  • disconnect(const char *señal, const QObject *receiver, const char *method) const
  • disconnect(const QObject *remitente, PointerToMemberFunction señal, const QObject *receptor, PointerToMemberFunction método)
  • deleteLater()

Propiedades

Funciones públicas

QObject(QObject *parent = nullptr)
virtual ~QObject()
QBindable<QString> bindableObjectName()
bool blockSignals(bool block)
const QObjectList &children() const
QMetaObject::Connection connect(const QObject *sender, const char *signal, const char *method, Qt::ConnectionType type = Qt::AutoConnection) const
bool disconnect(const QObject *receiver, const char *method = nullptr) const
bool disconnect(const char *signal = nullptr, const QObject *receiver = nullptr, const char *method = nullptr) const
void dumpObjectInfo() const
void dumpObjectTree() const
QList<QByteArray> dynamicPropertyNames() const
virtual bool event(QEvent *e)
virtual bool eventFilter(QObject *watched, QEvent *event)
T findChild(QAnyStringView name, Qt::FindChildOptions options = Qt::FindChildrenRecursively) const
(since 6.7) T findChild(Qt::FindChildOptions options = Qt::FindChildrenRecursively) const
QList<T> findChildren(QAnyStringView name, Qt::FindChildOptions options = Qt::FindChildrenRecursively) const
(since 6.3) QList<T> findChildren(Qt::FindChildOptions options = Qt::FindChildrenRecursively) const
QList<T> findChildren(const QRegularExpression &re, Qt::FindChildOptions options = Qt::FindChildrenRecursively) const
bool inherits(const char *className) const
void installEventFilter(QObject *filterObj)
(since 6.11) bool isQmlExposed() const
(since 6.4) bool isQuickItemType() const
bool isWidgetType() const
bool isWindowType() const
void killTimer(int id)
(since 6.8) void killTimer(Qt::TimerId id)
virtual const QMetaObject *metaObject() const
bool moveToThread(QThread *targetThread)
QString objectName() const
QObject *parent() const
QVariant property(const char *name) const
void removeEventFilter(QObject *obj)
void setObjectName(const QString &name)
(since 6.4) void setObjectName(QAnyStringView name)
void setParent(QObject *parent)
bool setProperty(const char *name, const QVariant &value)
(since 6.6) bool setProperty(const char *name, QVariant &&value)
bool signalsBlocked() const
int startTimer(int interval, Qt::TimerType timerType = Qt::CoarseTimer)
int startTimer(std::chrono::nanoseconds interval, Qt::TimerType timerType = Qt::CoarseTimer)
QThread *thread() const

Ranuras públicas

void deleteLater()

Señales

void destroyed(QObject *obj = nullptr)
void objectNameChanged(const QString &objectName)

Miembros públicos estáticos

QMetaObject::Connection connect(const QObject *sender, const QMetaMethod &signal, const QObject *receiver, const QMetaMethod &method, Qt::ConnectionType type = Qt::AutoConnection)
QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection)
QMetaObject::Connection connect(const QObject *sender, PointerToMemberFunction signal, Functor functor)
QMetaObject::Connection connect(const QObject *sender, PointerToMemberFunction signal, const QObject *context, Functor functor, Qt::ConnectionType type = Qt::AutoConnection)
QMetaObject::Connection connect(const QObject *sender, PointerToMemberFunction signal, const QObject *receiver, PointerToMemberFunction method, Qt::ConnectionType type = Qt::AutoConnection)
bool disconnect(const QMetaObject::Connection &connection)
bool disconnect(const QObject *sender, const QMetaMethod &signal, const QObject *receiver, const QMetaMethod &method)
bool disconnect(const QObject *sender, const char *signal, const QObject *receiver, const char *method)
bool disconnect(const QObject *sender, PointerToMemberFunction signal, const QObject *receiver, PointerToMemberFunction method)
const QMetaObject staticMetaObject
QString tr(const char *sourceText, const char *disambiguation = nullptr, int n = -1)

Funciones protegidas

virtual void childEvent(QChildEvent *event)
virtual void connectNotify(const QMetaMethod &signal)
virtual void customEvent(QEvent *event)
virtual void disconnectNotify(const QMetaMethod &signal)
bool isSignalConnected(const QMetaMethod &signal) const
int receivers(const char *signal) const
QObject *sender() const
int senderSignalIndex() const
virtual void timerEvent(QTimerEvent *event)
QObjectList
(since 6.8) enum class TimerId { Invalid }
T qobject_cast(QObject *object)
T qobject_cast(const QObject *object)

Macros

Descripción detallada

QObject es el corazón del modelo de objetos de Qt. La característica central en este modelo es un mecanismo muy potente para la comunicación de objetos sin fisuras llamado señales y ranuras. Puedes conectar una señal a un slot con connect() y destruir la conexión con disconnect(). Para evitar bucles de notificación interminables, puede bloquear temporalmente las señales con blockSignals(). Las funciones protegidas connectNotify() y disconnectNotify() permiten realizar un seguimiento de las conexiones.

Los QObjects se organizan en árboles de objetos. Cuando creas un QObject con otro objeto como padre, el objeto se añadirá automáticamente a la lista children() del padre. El padre toma la propiedad del objeto; es decir, borrará automáticamente a sus hijos en su destructor. Puede buscar un objeto por su nombre y, opcionalmente, por su tipo utilizando findChild() o findChildren().

Cada objeto tiene un objectName() y su nombre de clase puede encontrarse mediante el correspondiente metaObject() (véase QMetaObject::className()). Se puede determinar si la clase del objeto hereda otra clase en la jerarquía de herencia QObject utilizando la función inherits().

Cuando un objeto es eliminado, emite una señal destroyed(). Puedes capturar esta señal para evitar referencias colgantes a QObjects.

Los QObjects pueden recibir eventos a través de event() y filtrar los eventos de otros objetos. Ver installEventFilter() y eventFilter() para más detalles. Un manejador de conveniencia, childEvent(), puede ser reimplementado para atrapar eventos hijos.

Por último, pero no menos importante, QObject proporciona el soporte básico para temporizadores en Qt; ver QChronoTimer para soporte de alto nivel para temporizadores.

Observa que la macro Q_OBJECT es obligatoria para cualquier objeto que implemente señales, ranuras o propiedades. También es necesario ejecutar el Meta-Object Compiler en el archivo fuente. Recomendamos encarecidamente el uso de esta macro en todas las subclases de QObject independientemente de si realmente utilizan señales, ranuras y propiedades, ya que el no hacerlo puede hacer que ciertas funciones muestren un comportamiento extraño.

Todos los Qt Widgets heredan de QObject. La función isWidgetType() devuelve si un objeto es realmente un widget. Es mucho más rápida que qobject_cast<QWidget *>(obj) u obj->inherits("QWidget").

Algunas funciones QObject, por ejemplo children(), devuelven un QObjectList. QObjectList es un typedef para QList<QObject *>.

Afinidad de hilos

Se dice que una instancia de QObject tiene afinidad de hilo, o que vive en un hilo determinado. Cuando un QObject recibe un queued signal o un evento publicado, el slot o manejador de evento se ejecutará en el thread en el que vive el objeto.

Nota: Si un QObject no tiene afinidad de subproceso (es decir, si thread() devuelve cero), o si vive en un subproceso que no tiene un bucle de eventos en ejecución, entonces no puede recibir señales en cola o eventos publicados.

Por defecto, un QObject vive en el hilo en el que se crea. La afinidad de un objeto puede ser consultada usando thread() y cambiada usando moveToThread().

Todos los QObjects deben vivir en el mismo hilo que su padre. En consecuencia:

  • setParent() fallará si los dos QObjects involucrados viven en hilos diferentes.
  • Cuando un QObject es movido a otro thread, todos sus hijos serán automáticamente movidos también.
  • moveToThread() fallará si el QObject tiene un padre.
  • Si se crean QObjects dentro de QThread::run(), no pueden convertirse en hijos del objeto QThread porque QThread no vive en el hilo que llama a QThread::run().

Nota: Las variables miembro de un QObject no se convierten automáticamente en sus hijos. La relación padre-hijo debe establecerse pasando un puntero al objeto hijo constructor, o llamando a setParent(). Sin este paso, las variables miembro del objeto permanecerán en el hilo anterior cuando se llame a moveToThread().

Sin constructor de copia ni operador de asignación

QObject no tiene constructor de copia ni operador de asignación. Esto es por diseño. En realidad, están declarados, pero en una sección de private con la macro Q_DISABLE_COPY(). De hecho, todas las clases Qt derivadas de QObject (directas o indirectas) utilizan esta macro para declarar que su constructor de copia y su operador de asignación son privados. El razonamiento se encuentra en la discusión sobre Identidad vs Valor en la página Modelo de Objetos Qt.

La principal consecuencia es que deberías usar punteros a QObject (o a tu subclase de QObject) donde de otro modo podrías tener la tentación de usar tu subclase de QObject como valor. Por ejemplo, sin un constructor de copia, no puedes usar una subclase de QObject como valor a almacenar en una de las clases contenedoras. Debes almacenar punteros.

Auto-Conexión

El sistema de meta-objetos de Qt proporciona un mecanismo para conectar automáticamente señales y ranuras entre subclases QObject y sus hijos. Siempre que los objetos se definan con nombres de objeto adecuados, y las ranuras sigan una convención de nomenclatura simple, esta conexión puede realizarse en tiempo de ejecución mediante la función QMetaObject::connectSlotsByName().

uic genera código que invoca esta función para permitir la conexión automática entre widgets en formularios creados con Qt Widgets Designer. Encontrará más información sobre el uso de la conexión automática con Qt Widgets Designer en la sección Uso de un archivo de interfaz de usuario de Designer en su aplicación del manual Qt Widgets Designer.

Propiedades Dinámicas

Las propiedades dinámicas pueden ser añadidas y eliminadas de las instancias QObject en tiempo de ejecución. Las propiedades dinámicas no necesitan ser declaradas en tiempo de compilación, pero proporcionan las mismas ventajas que las propiedades estáticas y son manipuladas usando la misma API - usando property() para leerlas y setProperty() para escribirlas.

Las propiedades dinámicas están soportadas por Qt Widgets Designer, y tanto los widgets estándar de Qt como los formularios creados por el usuario pueden tener propiedades dinámicas.

Internacionalización (I18n)

Todas las subclases de QObject soportan las características de traducción de Qt, haciendo posible traducir la interfaz de usuario de una aplicación a diferentes idiomas.

Para que el texto visible para el usuario sea traducible, debe ser envuelto en llamadas a la función tr(). Esto se explica en detalle en el documento Escribiendo código fuente para traducción.

Véase también QMetaObject, QPointer, QObjectCleanupHandler, Q_DISABLE_COPY(), y Árboles de objetos y propiedad.

Documentación de propiedades

[bindable] objectName : QString

Nota: Esta propiedad admite enlaces QProperty.

Esta propiedad contiene el nombre de este objeto

Puede encontrar un objeto por su nombre (y tipo) utilizando findChild(). Puede encontrar un conjunto de objetos con findChildren().

qDebug("MyClass::setPrecision(): (%s) precisión inválida %f",       qPrintable(objectName()), newPrecision);

Por defecto, esta propiedad contiene una cadena vacía.

Funciones de acceso:

QString objectName() const
void setObjectName(const QString &name)
void setObjectName(QAnyStringView name)

Señal del notificador:

void objectNameChanged(const QString &objectName)[see note below]

Nota: Se trata de una señal privada. Puede utilizarse en conexiones de señal pero no puede ser emitida por el usuario.

Véase también metaObject() y QMetaObject::className().

Documentación de las funciones miembro

[explicit invokable] QObject::QObject(QObject *parent = nullptr)

Construye un objeto con el objeto padre parent.

El padre de un objeto puede considerarse como su propietario. Por ejemplo, un dialog box es el padre de los botones OK y Cancel que contiene.

El destructor de un objeto padre destruye todos los objetos hijos.

Establecer parent a nullptr construye un objeto sin padre. Si el objeto es un widget, se convertirá en una ventana de nivel superior.

Nota: Esta función puede invocarse a través del sistema de meta-objetos y desde QML. Véase Q_INVOKABLE.

Véase también parent(), findChild(), y findChildren().

[virtual noexcept] QObject::~QObject()

Destruye el objeto, eliminando todos sus objetos hijos.

Todas las señales hacia y desde el objeto se desconectan automáticamente, y cualquier evento publicado pendiente para el objeto se elimina de la cola de eventos. Sin embargo, a menudo es más seguro utilizar deleteLater() en lugar de borrar directamente una subclase de QObject.

Advertencia: Se eliminan todos los objetos hijo. Si alguno de estos objetos está en la pila o es global, tarde o temprano tu programa se bloqueará. No recomendamos mantener punteros a objetos hijo desde fuera del padre. Si aún así lo haces, la señal destroyed() te da la oportunidad de detectar cuando un objeto es destruido.

Advertencia: Borrar un QObject mientras está gestionando un evento que le ha sido enviado puede provocar un fallo. No debes borrar el QObject directamente si existe en un hilo diferente al que se está ejecutando en ese momento. En su lugar, utilice deleteLater(), que hará que el bucle de eventos elimine el objeto después de que se le hayan enviado todos los eventos pendientes.

Véase también deleteLater().

[noexcept] bool QObject::blockSignals(bool block)

Si block es verdadero, las señales emitidas por este objeto se bloquean (es decir, emitir una señal no invocará nada conectado a ella). Si block es falso, no se producirá tal bloqueo.

El valor de retorno es el valor anterior de signalsBlocked().

Tenga en cuenta que la señal destroyed() se emitirá incluso si las señales de este objeto han sido bloqueadas.

Las señales emitidas mientras están bloqueadas no se almacenan en el buffer.

Véase también signalsBlocked() y QSignalBlocker.

[virtual protected] void QObject::childEvent(QChildEvent *event)

Este manejador de eventos puede ser reimplementado en una subclase para recibir eventos hijos. El evento se pasa en el parámetro event.

QEvent::ChildAdded y QEvent::ChildRemoved se envían a los objetos cuando se añaden o eliminan hijos. En ambos casos sólo se puede confiar en que el hijo sea un QObject, o si isWidgetType() devuelve true, un QWidget. (Esto se debe a que, en el caso ChildAdded, el hijo aún no está completamente construido, y en el caso ChildRemoved puede que ya haya sido destruido).

QEvent::ChildPolished Se envían eventos a los widgets cuando se pulen los hijos, o cuando se añaden hijos pulidos. Si recibes un evento de hijo pulido, la construcción del hijo normalmente se ha completado. Sin embargo, esto no está garantizado, y pueden enviarse múltiples eventos de pulido durante la ejecución del constructor de un widget.

Por cada widget hijo se recibe un evento ChildAdded, cero o más eventos ChildPolished y un evento ChildRemoved.

El evento ChildPolished se omite si un hijo es eliminado inmediatamente después de ser añadido. Si un hijo es pulido varias veces durante su construcción y destrucción, puedes recibir varios eventos hijo pulido para el mismo hijo, cada vez con una tabla virtual diferente.

Véase también event().

const QObjectList &QObject::children() const

Devuelve una lista de objetos hijo. La clase QObjectList se define en el fichero de cabecera <QObject> de la siguiente manera:

El primer hijo añadido es el objeto first de la lista y el último hijo añadido es el objeto last de la lista, es decir, los nuevos hijos se añaden al final.

Tenga en cuenta que el orden de la lista cambia cuando los hijos de QWidget son raised o lowered. Un widget que se sube se convierte en el último objeto de la lista, y un widget que se baja se convierte en el primer objeto de la lista.

Véase también findChild(), findChildren(), parent() y setParent().

[static] QMetaObject::Connection QObject::connect(const QObject *sender, const QMetaMethod &signal, const QObject *receiver, const QMetaMethod &method, Qt::ConnectionType type = Qt::AutoConnection)

Crea una conexión del tipo type desde signal en el objeto sender hasta method en el objeto receiver. Devuelve un "handle" de la conexión que puede utilizarse para desconectarla posteriormente.

El handle de la conexión será inválido si no puede crear la conexión, por ejemplo, los parámetros no eran válidos. Puede comprobar si QMetaObject::Connection es válido convirtiéndolo en un bool.

Esta función trabaja de la misma manera que connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type) pero utiliza QMetaMethod para especificar la señal y el método.

Ver también connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type).

[static] QMetaObject::Connection QObject::connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection)

Crea una conexión del tipo type desde signal en el objeto sender hasta method en el objeto receiver. Devuelve un "handle" de la conexión que puede utilizarse para desconectarla posteriormente.

Debe utilizar las macros SIGNAL() y SLOT() cuando especifique el signal y el method, por ejemplo:

QLabel *label = new QLabel;
QScrollBar *scrollBar = new QScrollBar;
QObject::connect(scrollBar, SIGNAL(valueChanged(int)),
                 label,  SLOT(setNum(int)));

Este ejemplo garantiza que la etiqueta muestre siempre el valor actual de la barra de desplazamiento. Tenga en cuenta que los parámetros signal y slots no deben contener ningún nombre de variable, sólo el tipo. Por ejemplo, lo siguiente no funcionaría y devolvería false:

// WRONG
QObject::connect(scrollBar, SIGNAL(valueChanged(int value)),
                 label, SLOT(setNum(int value)));

Una señal también puede conectarse a otra señal:

class MyWidget : public QWidget
{
    Q_OBJECT

public:
    MyWidget();

signals:
    void buttonClicked();

private:
    QPushButton *myButton;
};

MyWidget::MyWidget()
{
    myButton = new QPushButton(this);
    connect(myButton, SIGNAL(clicked()),
            this, SIGNAL(buttonClicked()));
}

En este ejemplo, el constructor MyWidget retransmite una señal desde una variable miembro privada, y la hace disponible bajo un nombre que se relaciona con MyWidget.

Una señal puede conectarse a muchas ranuras y señales. Muchas señales pueden estar conectadas a una ranura.

Si una señal está conectada a varias ranuras, las ranuras se activan en el mismo orden en que se realizaron las conexiones, cuando se emite la señal.

La función devuelve un QMetaObject::Connection que representa un asa a una conexión si conecta con éxito la señal a la ranura. El asa de conexión no será válida si no puede crear la conexión, por ejemplo, si QObject no puede verificar la existencia de signal o method, o si sus firmas no son compatibles. Puedes comprobar si el manejador es válido convirtiéndolo en un bool.

Por defecto, se emite una señal por cada conexión que realices; se emiten dos señales por conexiones duplicadas. Puedes romper todas estas conexiones con una sola llamada a disconnect(). Si pasa el Qt::UniqueConnection type , la conexión sólo se realizará si no es un duplicado. Si ya hay un duplicado (exactamente la misma señal al mismo slot en los mismos objetos), la conexión fallará y connect devolverá un QMetaObject::Connection inválido.

Nota: Qt::UniqueConnections no funciona para lambdas, funciones no-miembro y functores; sólo se aplica a la conexión con funciones miembro.

El parámetro opcional type describe el tipo de conexión a establecer. En particular, determina si una señal concreta se entrega a una ranura inmediatamente o se pone en cola para su entrega en un momento posterior. Si la señal se pone en cola, los parámetros deben ser de tipos conocidos por el sistema de meta-objetos de Qt, porque Qt necesita copiar los argumentos para almacenarlos en un evento entre bastidores. Si intentas usar una conexión en cola y obtienes el mensaje de error

QObject::connect: Cannot queue arguments of type 'MyType'
(Make sure 'MyType' is registered using qRegisterMetaType().)

llame a qRegisterMetaType() para registrar el tipo de datos antes de establecer la conexión.

Nota: Esta función es thread-safe.

Véase también disconnect(), sender(), qRegisterMetaType(), Q_DECLARE_METATYPE(), y Diferencias entre las conexiones basadas en cadenas y las basadas en funtores.

[static] template <typename PointerToMemberFunction, typename Functor> QMetaObject::Connection QObject::connect(const QObject *sender, PointerToMemberFunction signal, Functor functor)

Crea una conexión desde signal en el objeto sender a functor, y devuelve un handle a la conexión.

La señal debe ser una función declarada como señal en la cabecera. La función de ranura puede ser cualquier función o functor que pueda conectarse a la señal. Una función de ranura puede conectarse a una señal dada si la señal tiene al menos tantos argumentos como la función de ranura. Debe existir una conversión implícita entre los tipos de los argumentos correspondientes en la señal y la ranura.

Ejemplo:

void someFunction();
//...
void someOtherFunction()
{
    QPushButton *button = new QPushButton;
    QObject::connect(button, &QPushButton::clicked, someFunction);
}

También pueden utilizarse expresiones lambda:

    QByteArray page = "...";
    QTcpSocket *socket = new QTcpSocket;
    socket->connectToHost("qt-project.org", 80);
    QObject::connect(socket, &QTcpSocket::connected, [=] () {
            socket->write("GET " + page + "\r\n");
        });

La conexión se desconectará automáticamente si se destruye el emisor. Sin embargo, debes tener cuidado de que cualquier objeto utilizado dentro del functor siga vivo cuando se emita la señal.

Por esta razón, se recomienda utilizar la sobrecarga de connect() que también toma un QObject como receptor/contexto. Es posible desactivar el uso de la sobrecarga sin contexto definiendo la macro QT_NO_CONTEXTLESS_CONNECT.

Las funciones sobrecargadas pueden resolverse con ayuda de qOverload.

Esta función sobrecarga QObject::connect().

Nota: Esta función es thread-safe.

QMetaObject::Connection QObject::connect(const QObject *sender, const char *signal, const char *method, Qt::ConnectionType type = Qt::AutoConnection) const

Conecta signal desde el objeto sender al method de este objeto.

Equivale a connect(sender, signal, this, method, type).

Cada conexión que se realiza emite una señal, por lo que las conexiones duplicadas emiten dos señales. Puede romper una conexión utilizando disconnect().

Esta función sobrecarga QObject::connect().

Nota: Esta función es segura para hilos.

Véase también disconnect().

[static] template <typename PointerToMemberFunction, typename Functor> QMetaObject::Connection QObject::connect(const QObject *sender, PointerToMemberFunction signal, const QObject *context, Functor functor, Qt::ConnectionType type = Qt::AutoConnection)

Crea una conexión de un type dado desde signal en el objeto sender a functor para ser colocado en un bucle de eventos específico de context, y devuelve un handle a la conexión.

Nota: Qt::UniqueConnections no funciona para lambdas, funciones no miembros y functores; sólo se aplica a la conexión con funciones miembros.

La señal debe ser una función declarada como señal en la cabecera. La función de ranura puede ser cualquier función o functor que pueda conectarse a la señal. Una función de ranura puede conectarse a una señal dada si la señal tiene al menos tantos argumentos como la función de ranura. Debe existir una conversión implícita entre los tipos de los argumentos correspondientes en la señal y la ranura.

Ejemplo:

void someFunction();
//...
void someOtherFunction()
{
    QPushButton *button = new QPushButton;
    QObject::connect(button, &QPushButton::clicked, this, someFunction, Qt::QueuedConnection);
}

También pueden utilizarse expresiones lambda:

QByteArray page = "...";
QTcpSocket *socket = new QTcpSocket;
socket->connectToHost("qt-project.org", 80);
QObject::connect(socket, &QTcpSocket::connected, this, [=] () {
        socket->write("GET " + page + "\r\n");
    }, Qt::AutoConnection);

La conexión se desconectará automáticamente si se destruye el emisor o el contexto. Sin embargo, debes tener cuidado de que cualquier objeto utilizado dentro del functor siga vivo cuando se emita la señal.

Las funciones sobrecargadas pueden resolverse con ayuda de qOverload.

Esta función sobrecarga QObject::connect().

Nota: Esta función es thread-safe.

[static] template <typename PointerToMemberFunction> QMetaObject::Connection QObject::connect(const QObject *sender, PointerToMemberFunction signal, const QObject *receiver, PointerToMemberFunction method, Qt::ConnectionType type = Qt::AutoConnection)

Crea una conexión del tipo type desde signal en el objeto sender hasta method en el objeto receiver. Devuelve un "handle" a la conexión que puede utilizarse para desconectarla posteriormente.

La señal debe ser una función declarada como señal en la cabecera. La función de ranura puede ser cualquier función miembro que pueda conectarse a la señal. Una ranura puede conectarse a una señal dada si la señal tiene al menos tantos argumentos como la ranura, y existe una conversión implícita entre los tipos de los argumentos correspondientes en la señal y la ranura.

Ejemplo:

QLabel *label = new QLabel;
QLineEdit *lineEdit = new QLineEdit;
QObject::connect(lineEdit, &QLineEdit::textChanged,
                label,  &QLabel::setText);

Este ejemplo garantiza que la etiqueta muestre siempre el texto de edición de la línea actual.

Una señal puede conectarse a muchas ranuras y señales. Muchas señales pueden conectarse a una ranura.

Si una señal está conectada a varias ranuras, las ranuras se activan en el mismo orden en que se realizó la conexión, cuando se emite la señal.

La función devuelve un asa a una conexión si conecta con éxito la señal a la ranura. El asa de conexión no será válida si no puede crear la conexión, por ejemplo, si QObject no puede verificar la existencia de signal (si no se declaró como una señal) Puede comprobar si QMetaObject::Connection es válida convirtiéndola en un bool.

Por defecto, se emite una señal por cada conexión que realices; se emiten dos señales por conexiones duplicadas. Puedes romper todas estas conexiones con una sola llamada a disconnect(). Si pasa el Qt::UniqueConnection type , la conexión sólo se realizará si no es un duplicado. Si ya hay un duplicado (exactamente la misma señal a exactamente la misma ranura en los mismos objetos), la conexión fallará y connect devolverá un QMetaObject::Connection inválido.

El parámetro opcional type describe el tipo de conexión a establecer. En concreto, determina si una señal concreta se envía a una ranura inmediatamente o se pone en cola para su envío en otro momento. Si la señal se pone en cola, los parámetros deben ser de tipos conocidos por el sistema de meta-objetos de Qt, porque Qt necesita copiar los argumentos para almacenarlos en un evento entre bastidores. Si intentas usar una conexión en cola y obtienes el mensaje de error

QObject::connect: Cannot queue arguments of type 'MyType'
(Make sure 'MyType' is registered using qRegisterMetaType().)

asegúrese de declarar el tipo de argumento con Q_DECLARE_METATYPE

Las funciones sobrecargadas pueden resolverse con la ayuda de qOverload.

Esta función sobrecarga QObject::connect().

Nota: Esta función es thread-safe.

Vea también Diferencias entre Conexiones Basadas en Cadenas y Conexiones Basadas en Functores.

[virtual protected] void QObject::connectNotify(const QMetaMethod &signal)

Esta función virtual es llamada cuando algo ha sido conectado a signal en este objeto.

Si desea comparar signal con una señal específica, puede utilizar QMetaMethod::fromSignal() como se indica a continuación:

    if (signal == QMetaMethod::fromSignal(&MyObject::valueChanged)) {
        // signal is valueChanged
    }

Advertencia: Esta función viola el principio de modularidad orientado a objetos. Sin embargo, puede ser útil cuando necesite realizar una operación costosa sólo si algo está conectado a una señal.

Advertencia: Esta función se llama desde el hilo que realiza la conexión, que puede ser un hilo diferente del hilo en el que vive este objeto. Esta función también puede ser llamada con un mutex interno de QObject bloqueado. Por lo tanto, no está permitido reintroducir ninguna función QObject, incluyendo isSignalConnected(), desde su reimplementación. Si bloquea un mutex en su reimplementación, asegúrese de no llamar a funciones QObject con ese mutex bloqueado en otros lugares o se producirá un bloqueo.

Véase también connect() y disconnectNotify().

[virtual protected] void QObject::customEvent(QEvent *event)

Este manejador de eventos puede ser reimplementado en una subclase para recibir eventos personalizados. Los eventos personalizados son eventos definidos por el usuario con un valor de tipo al menos tan grande como el elemento QEvent::User del enum QEvent::Type, y es típicamente una subclase QEvent. El evento se pasa en el parámetro event.

Véase también event() y QEvent.

[slot] void QObject::deleteLater()

Programa la eliminación de este objeto.

El objeto se borrará cuando el control vuelva al bucle de eventos. Si el bucle de eventos no se está ejecutando cuando se llama a esta función (por ejemplo, se llama a deleteLater() en un objeto antes de QCoreApplication::exec()), el objeto se borrará una vez que se inicie el bucle de eventos. Si se llama a deleteLater() después de que el bucle de eventos principal se haya detenido, el objeto no se borrará. Si se llama a deleteLater() en un objeto que vive en un hilo sin bucle de eventos en ejecución, el objeto será destruido cuando el hilo termine.

Un patrón común cuando se utiliza un trabajador QObject en un QThread es conectar la señal finished() del hilo a la ranura deleteLater() del trabajador para asegurarse de que se elimina de forma segura:

connect(thread, &QThread::finished, worker, &QObject::deleteLater);

Ten en cuenta que entrar y salir de un nuevo bucle de eventos (por ejemplo, abriendo un diálogo modal) no realizará el borrado diferido; para que el objeto sea borrado, el control debe volver al bucle de eventos desde el que se llamó a deleteLater(). Esto no se aplica a los objetos borrados mientras se estaba ejecutando un bucle de eventos anidado anterior: el bucle de eventos de Qt borrará esos objetos tan pronto como se inicie el nuevo bucle de eventos anidado.

En situaciones en las que Qt no esté manejando el despachador de eventos a través de, por ejemplo, QCoreApplication::exec() o QEventLoop::exec(), los borrados diferidos no se procesarán automáticamente. Para asegurar el borrado diferido en este escenario, se puede utilizar la siguiente solución:

const auto *eventDispatcher = QThread::currentThread()->eventDispatcher();
QObject::connect(eventDispatcher, &QAbstractEventDispatcher::aboutToBlock,
    QThread::currentThread(), []{
        if (QThread::currentThread()->loopLevel() == 0)
            QCoreApplication::sendPostedEvents(nullptr, QEvent::DeferredDelete);
    }
);

Nota: Esta función es segura para los hilos.

Véase también destroyed() y QPointer.

[signal] void QObject::destroyed(QObject *obj = nullptr)

Esta señal se emite inmediatamente antes de que el objeto obj sea destruido, después de que cualquier instancia de QPointer haya sido notificada, y no puede ser bloqueada.

Todos los hijos del objeto se destruyen inmediatamente después de que se emita esta señal.

Véase también deleteLater() y QPointer.

[static] bool QObject::disconnect(const QMetaObject::Connection &connection)

Desconectar una conexión.

Si la dirección connection no es válida o ya ha sido desconectada, no hace nada y devuelve false.

Véase también connect().

[static] bool QObject::disconnect(const QObject *sender, const QMetaMethod &signal, const QObject *receiver, const QMetaMethod &method)

Desconecta signal en el objeto sender de method en el objeto receiver. Devuelve true si la conexión se ha roto con éxito; en caso contrario devuelve false.

Esta función ofrece las mismas posibilidades que disconnect(const QObject *sender, const char *signal, const QObject *receiver, const char *method) pero utiliza QMetaMethod para representar la señal y el método a desconectar.

Adicionalmente esta función devuelve false y ninguna señal y ranuras desconectadas si:

  1. signal no es miembro de la clase emisora o de una de sus clases padre.
  2. method no es miembro de la clase receptora o de una de sus clases padre.
  3. signal la instancia no representa una señal.

Nota: Utilice la misma sintaxis, puntero a miembro-función o basada en cadena utilizando las macros SIGNAL y SLOT, en connect() y las correspondientes llamadas a disconnect().

Para evitar desajustes, almacene el manejador de conexión devuelto por connect(), y utilícelo en la llamada a disconnect().

Nota: Si se desconecta un queued connection, es posible que se sigan entregando eventos ya programados, haciendo que se llame al receptor después de desconectar la conexión.

QMetaMethod() puede utilizarse como comodín en el sentido "cualquier señal" o "cualquier ranura del objeto receptor". Del mismo modo nullptr puede utilizarse para receiver en el sentido de "cualquier objeto receptor". En este caso el método también debería ser QMetaMethod(). El parámetro sender nunca debería ser nullptr.

Nota: Al desconectar todas las conexiones de ranura de señal también se desconectará la señal QObject::destroyed() si está conectada. Hacerlo puede afectar negativamente a las clases que dependen de esta señal para la limpieza de recursos. Se recomienda desconectar sólo las señales específicas que fueron conectadas por el código de la aplicación.

Ver también disconnect(const QObject *sender, const char *signal, const QObject *receiver, const char *method).

[static] bool QObject::disconnect(const QObject *sender, const char *signal, const QObject *receiver, const char *method)

Desconecta signal en el objeto sender de method en el objeto receiver. Devuelve true si la conexión se ha roto con éxito; en caso contrario devuelve false.

Una conexión de ranura de señal se elimina cuando se destruye cualquiera de los objetos implicados.

disconnect() se utiliza normalmente de tres formas, como demuestran los siguientes ejemplos.

  1. Desconecta todo lo conectado a las señales de un objeto:
        QObject::disconnect(myObject, nullptr, nullptr, nullptr);

    equivalente a la función sobrecargada no estática

        myObject->disconnect();
  2. Desconectar todo lo conectado a una señal específica:
        QObject::disconnect(myObject, SIGNAL(mySignal()), nullptr, nullptr);

    equivalente a la función sobrecargada no estática

        myObject->disconnect(SIGNAL(mySignal()));
  3. Desconectar un receptor específico:
        QObject::disconnect(myObject, nullptr, myReceiver, nullptr);

    equivalente a la función sobrecargada no estática

        myObject->disconnect(myReceiver);

Nota: Utilice la misma sintaxis, puntero-a-función-miembro o basada en cadena utilizando las macros SIGNAL y SLOT, en connect() y las correspondientes llamadas a disconnect().

Para evitar desajustes, almacene el manejador de conexión devuelto por connect(), y utilícelo en la llamada a disconnect().

Nota: Si se desconecta un queued connection, es posible que se sigan entregando eventos ya programados, provocando que se llame al receptor después de desconectar la conexión.

nullptr puede utilizarse como comodín, lo que significa "cualquier señal", "cualquier objeto receptor" o "cualquier ranura del objeto receptor", respectivamente.

sender nunca puede ser nullptr. (No se pueden desconectar señales de más de un objeto en una sola llamada).

Si signal es nullptr, desconecta receiver y method de cualquier señal. Si no, sólo se desconecta la señal especificada.

Si receiver es nullptr, desconecta cualquier cosa conectada a signal. Si no, no se desconectan las ranuras de los objetos que no sean receiver.

Si method es nullptr, desconecta todo lo que esté conectado a receiver. Si no, sólo se desconectan las ranuras denominadas method, y el resto de ranuras se dejan solas. El method debe ser nullptr si se omite receiver, por lo que no se puede desconectar una ranura con nombre específico en todos los objetos.

Nota: Al desconectar todas las conexiones de ranura de señal también se desconectará la señal QObject::destroyed() si está conectada. Esto puede afectar negativamente a las clases que dependen de esta señal para la limpieza de recursos. Se recomienda desconectar sólo las señales específicas que fueron conectadas por el código de la aplicación.

Nota: Esta función es thread-safe.

Véase también connect().

bool QObject::disconnect(const QObject *receiver, const char *method = nullptr) const

Desconecta todas las señales de este objeto de receiver's method.

Nota: Utilice la misma sintaxis, puntero-a-función-miembro o basada en cadena utilizando las macros SIGNAL y SLOT, en connect() y las correspondientes llamadas a disconnect().

Para evitar desajustes, almacene el manejador de conexión devuelto por connect(), y utilícelo en la llamada a disconnect().

Nota: Si se desconecta un queued connection, es posible que se sigan entregando eventos ya programados, provocando que se llame al receptor después de desconectar la conexión.

Una conexión de ranura de señal se elimina cuando se destruye cualquiera de los objetos implicados.

Esta función sobrecarga QObject::disconnect().

bool QObject::disconnect(const char *signal = nullptr, const QObject *receiver = nullptr, const char *method = nullptr) const

Desconecta signal de method de receiver.

Nota: Utilice la misma sintaxis, puntero-a-función-miembro o basada en cadena utilizando las macros SIGNAL y SLOT, en connect() y las correspondientes llamadas a disconnect().

Para evitar desajustes, almacene el manejador de conexión devuelto por connect(), y utilícelo en la llamada a disconnect().

Nota: Si se desconecta un queued connection, es posible que se sigan entregando eventos ya programados, provocando que se llame al receptor después de desconectar la conexión.

Una conexión de ranura de señal se elimina cuando se destruye cualquiera de los objetos implicados.

Nota: La desconexión de todas las conexiones de ranura de señal también desconectará la señal QObject::destroyed() si está conectada. Esto puede afectar negativamente a las clases que dependen de esta señal para la limpieza de recursos. Se recomienda desconectar sólo las señales específicas que fueron conectadas por el código de la aplicación.

Esta función sobrecarga QObject::disconnect().

Nota: Esta función es thread-safe.

[static] template <typename PointerToMemberFunction> bool QObject::disconnect(const QObject *sender, PointerToMemberFunction signal, const QObject *receiver, PointerToMemberFunction method)

Desconecta signal en el objeto sender de method en el objeto receiver. Devuelve true si la conexión se ha roto con éxito; en caso contrario devuelve false.

Una conexión de ranura de señal se elimina cuando se destruye cualquiera de los objetos implicados.

disconnect() se utiliza normalmente de tres formas, como demuestran los siguientes ejemplos.

  1. Desconecta todo lo conectado a las señales de un objeto:
        QObject::disconnect(myObject, nullptr, nullptr, nullptr);
  2. Desconecta todo lo conectado a una señal específica:
        QObject::disconnect(myObject, &MyObject::mySignal, nullptr, nullptr);
  3. Desconectar un receptor específico:
        QObject::disconnect(myObject, nullptr, myReceiver, nullptr);
  4. Desconectar una conexión de una señal específica a una ranura específica:
        QObject::disconnect(lineEdit, &QLineEdit::textChanged,
                        label,  &QLabel::setText);

nullptr puede utilizarse como comodín, lo que significa "cualquier señal", "cualquier objeto receptor" o "cualquier ranura del objeto receptor", respectivamente.

sender nunca puede ser nullptr. (No se pueden desconectar señales de más de un objeto en una sola llamada).

Si signal es nullptr, desconecta receiver y method de cualquier señal. Si no, sólo se desconecta la señal especificada.

Si receiver es nullptr, desconecta cualquier cosa conectada a signal. Si no, sólo se desconectan las ranuras del receptor especificado. disconnect() con un receiver no nulo también desconecta las funciones de ranura que estaban conectadas con receiver como su objeto de contexto.

Si method es nullptr, desconecta cualquier cosa que esté conectada a receiver. Si no, sólo se desconectan las ranuras llamadas method, y el resto de ranuras se dejan solas. El method debe ser nullptr si se omite receiver, por lo que no se puede desconectar una ranura con nombre específico en todos los objetos.

Nota: No es posible utilizar esta sobrecarga para desconectar señales conectadas a functores o expresiones lambda. Esto se debe a que no es posible compararlas. En su lugar, utilice la sobrecarga que toma un QMetaObject::Connection.

Nota: A menos que method sea nullptr, esta función tampoco romperá las conexiones que se hicieron usando la versión basada en cadenas de connect(). Para romper dichas conexiones, utilice la correspondiente sobrecarga basada en cadenas de disconnect().

Esta función sobrecarga QObject::disconnect().

Nota: Esta función es segura para hilos.

Véase también connect().

[virtual protected] void QObject::disconnectNotify(const QMetaMethod &signal)

Esta función virtual es llamada cuando algo ha sido desconectado de signal en este objeto.

Véase connectNotify() para un ejemplo de cómo comparar signal con una señal específica.

Si todas las señales fueron desconectadas de este objeto (por ejemplo, el argumento de señal a disconnect() era nullptr), disconnectNotify() sólo es llamada una vez, y signal será un QMetaMethod inválido (QMetaMethod::isValid() devuelve false).

Advertencia: Esta función viola el principio de modularidad orientado a objetos. Sin embargo, puede ser útil para optimizar el acceso a recursos costosos.

Advertencia: Esta función se llama desde el hilo que realiza la desconexión, que puede ser un hilo distinto del hilo en el que vive este objeto. Esta función también puede ser llamada con un mutex interno de QObject bloqueado. Por lo tanto, no está permitido reintroducir ninguna función QObject, incluyendo isSignalConnected(), desde su reimplementación. Si bloquea un mutex en su reimplementación, asegúrese de no llamar a funciones QObject con ese mutex bloqueado en otros lugares o se producirá un bloqueo.

Véase también disconnect() y connectNotify().

void QObject::dumpObjectInfo() const

Vuelca información sobre las conexiones de señal, etc. de este objeto a la salida de depuración.

Nota: Antes de Qt 5.9, esta función no era const.

Véase también dumpObjectTree().

void QObject::dumpObjectTree() const

Vuelca un árbol de hijos a la salida de depuración.

Nota: Antes de Qt 5.9, esta función no era const.

Véase también dumpObjectInfo().

QList<QByteArray> QObject::dynamicPropertyNames() const

Devuelve los nombres de todas las propiedades que se han añadido dinámicamente al objeto mediante setProperty().

[virtual] bool QObject::event(QEvent *e)

Esta función virtual recibe eventos a un objeto y debe devolver true si el evento e fue reconocido y procesado.

La función event() puede ser reimplementada para personalizar el comportamiento de un objeto.

Asegúrese de llamar a la implementación de la clase de eventos padre para todos los eventos que no haya manejado.

Ejemplo:

class MyClass : public QWidget
{
    Q_OBJECT

public:
    MyClass(QWidget *parent = nullptr);
    ~MyClass();

    bool event(QEvent* ev) override
    {
        if (ev->type() == QEvent::PolishRequest) {
            // overwrite handling of PolishRequest if any
            doThings();
            return true;
        } else  if (ev->type() == QEvent::Show) {
            // complement handling of Show if any
            doThings2();
            QWidget::event(ev);
            return true;
        }
        // Make sure the rest of events are handled
        return QWidget::event(ev);
    }
};

Ver también installEventFilter(), timerEvent(), QCoreApplication::sendEvent(), y QCoreApplication::postEvent().

[virtual] bool QObject::eventFilter(QObject *watched, QEvent *event)

Filtra los eventos si este objeto se ha instalado como filtro de eventos para el objeto watched.

En su reimplementación de esta función, si desea filtrar el event, es decir, impedir que se siga gestionando, devuelva true; en caso contrario, devuelva false.

Ejemplo:

clase MainWindow : public QMainWindow
{public: MainWindow();protected: bool eventFilter(QObject*obj, QEvent *ev) override;private:    QTextEdit *textEdit; }; MainWindow::MainWindow() { textEdit = new QTextEdit; setCentralWidget(textEdit);  textEdit->installEventFilter(this); }bool MainWindow::eventFilter(QObject*obj, QEvent *event) { if (obj == textEdit) { if (event->type() == QEvent::KeyPress) { QKeyEvent *teclaEvento =  static_cast<QKeyEvent*>(evento);            qDebug() << "Ate key press" << keyEvent->key();
           return true; } else { return false; } } else { // pasa el evento a la clase padre return QMainWindow::eventFilter(obj, event); } }

Observa en el ejemplo anterior que los eventos no manejados se pasan a la función eventFilter() de la clase base, ya que la clase base podría haber reimplementado eventFilter() para sus propios propósitos internos.

Algunos eventos, como QEvent::ShortcutOverride deben ser aceptados explícitamente (llamando a accept() sobre ellos) para evitar su propagación.

Advertencia: Si elimina el objeto receptor en esta función, asegúrese de devolver true. De lo contrario, Qt reenviará el evento al objeto eliminado y el programa podría bloquearse.

Véase también installEventFilter().

template <typename T> T QObject::findChild(QAnyStringView name, Qt::FindChildOptions options = Qt::FindChildrenRecursively) const

Devuelve el hijo de este objeto que se puede convertir al tipo T y que se llama name, o nullptr si no existe tal objeto. Un argumento name nulo hace que se busquen todos los objetos. Un argumento name vacío y no nulo busca sólo objetos cuyo objectName esté vacío. La búsqueda se realiza de forma recursiva, a menos que options especifique la opción FindDirectChildrenOnly.

Si hay más de un hijo que coincide con la búsqueda, se devuelve el antepasado más directo. Si hay varios ancestros más directos, se devolverá el primer hijo en children(). En ese caso, es mejor utilizar findChildren() para obtener la lista completa de todos los hijos.

Este ejemplo devuelve un QPushButton hijo de parentWidget llamado "button1", aunque el botón no sea hijo directo del padre:

QPushButton *button = parentWidget->findChild<QPushButton *>("button1");

Este ejemplo devuelve un QListWidget hijo de parentWidget:

QListWidget *list = parentWidget->findChild<QListWidget *>();

Este ejemplo devuelve un QPushButton hijo de parentWidget (su padre directo) llamado "button1":

QPushButton *button = parentWidget->findChild<QPushButton *>("button1", Qt::FindDirectChildrenOnly);

Este ejemplo devuelve un QListWidget hijo de parentWidget, su padre directo:

QListWidget *list = parentWidget->findChild<QListWidget *>(Qt::FindDirectChildrenOnly);

Nota: En versiones de Qt anteriores a la 6.7, esta función tomaba name como QString, no QAnyStringView.

Véase también findChildren().

[since 6.7] template <typename T> T QObject::findChild(Qt::FindChildOptions options = Qt::FindChildrenRecursively) const

Devuelve el hijo de este objeto que se puede convertir al tipo T, o nullptr si no existe tal objeto. La búsqueda se realiza de forma recursiva, a menos que options especifique la opción FindDirectChildrenOnly.

Si hay más de un hijo que coincida con la búsqueda, se devuelve el antepasado más directo. Si hay varios ancestros más directos, se devolverá el primer hijo en children(). En ese caso, es mejor utilizar findChildren() para obtener la lista completa de todos los hijos.

Se trata de una función sobrecargada.

Esta función se introdujo en Qt 6.7.

Véase también findChildren().

template <typename T> QList<T> QObject::findChildren(QAnyStringView name, Qt::FindChildOptions options = Qt::FindChildrenRecursively) const

Devuelve todos los hijos de este objeto con el name dado que se pueden convertir al tipo T, o una lista vacía si no hay tales objetos. Un argumento name nulo hace que se busquen todos los objetos, uno vacío sólo aquellos cuyo objectName esté vacío. La búsqueda se realiza de forma recursiva, a menos que options especifique la opción FindDirectChildrenOnly.

El siguiente ejemplo muestra cómo encontrar una lista de QWidgets hijos del parentWidget especificado llamado widgetname:

QList<QWidget *> widgets = parentWidget->findChildren<QWidget *>("widgetname");

Este ejemplo devuelve todos los QPushButtons que son hijos de parentWidget:

QList<QPushButton *> allPButtons = parentWidget->findChildren<QPushButton *>();

Este ejemplo devuelve todos los QPushButtons que son hijos inmediatos de parentWidget:

QList<QPushButton *> childButtons = parentWidget.findChildren<QPushButton *>(Qt::FindDirectChildrenOnly);

Nota: En versiones de Qt anteriores a la 6.7, esta función tomaba name como QString, no QAnyStringView.

Véase también findChild().

[since 6.3] template <typename T> QList<T> QObject::findChildren(Qt::FindChildOptions options = Qt::FindChildrenRecursively) const

Devuelve todos los hijos de este objeto que se pueden convertir al tipo T, o una lista vacía si no existen tales objetos. La búsqueda se realiza de forma recursiva, a menos que options especifique la opción FindDirectChildrenOnly.

Se trata de una función sobrecargada.

Esta función se introdujo en Qt 6.3.

Véase también findChild().

template <typename T> QList<T> QObject::findChildren(const QRegularExpression &re, Qt::FindChildOptions options = Qt::FindChildrenRecursively) const

Devuelve los hijos de este objeto que se pueden convertir al tipo T y que tienen nombres que coinciden con la expresión regular re, o una lista vacía si no hay tales objetos. La búsqueda se realiza recursivamente, a menos que options especifique la opción FindDirectChildrenOnly.

Esta función sobrecarga QObject::findChildren().

bool QObject::inherits(const char *className) const

Devuelve true si este objeto es una instancia de una clase que hereda de className o de una subclase de QObject que hereda de className; en caso contrario devuelve false.

Se considera que una clase se hereda a sí misma.

Ejemplo:

QTimer *timer = new QTimer;         // QTimer inherits QObject
timer->inherits("QTimer");          // returns true
timer->inherits("QObject");         // returns true
timer->inherits("QAbstractButton"); // returns false

// QVBoxLayout inherits QObject and QLayoutItem
QVBoxLayout *layout = new QVBoxLayout;
layout->inherits("QObject");        // returns true
layout->inherits("QLayoutItem");    // returns true (even though QLayoutItem is not a QObject)

Si necesita determinar si un objeto es una instancia de una clase en particular con el propósito de hacer un casting, considere usar qobject_cast<Tipo *>(objeto) en su lugar.

Véase también metaObject() y qobject_cast().

void QObject::installEventFilter(QObject *filterObj)

Instala un filtro de eventos filterObj en este objeto. Por ejemplo:

monitoredObj->installEventFilter(filterObj);

Un filtro de eventos es un objeto que recibe todos los eventos que se envían a este objeto. El filtro puede detener el evento o reenviarlo a este objeto. El filtro de eventos filterObj recibe eventos a través de su función eventFilter(). La función eventFilter() debe devolver true si el evento debe ser filtrado, (es decir, detenido); en caso contrario debe devolver false.

Si se instalan varios filtros de eventos en un mismo objeto, se activa primero el filtro que se instaló en último lugar.

Si ya se ha instalado filterObj para este objeto, esta función lo desplaza para que actúe como si se hubiera instalado en último lugar.

Aquí hay una clase KeyPressEater que se come las pulsaciones de teclas de sus objetos monitorizados:

clase KeyPressEater : public QObject
{ Q_OBJECTpublic: KeyPressEater(QObject *parent = nullptr) : QObject(parent) {}//...protected: bool eventFilter(QObject*obj, QEvent *event) override; };bool KeyPressEater::eventFilter(QObject*obj, QEvent *event) { if (event->type() == QEvent::KeyPress) { QKeyEvent *teclaEvento =  static_cast<QKeyEvent *>(evento);        qDebug("Ate key press %d", keyEvent->key());
       return true; } else { // procesamiento estándar de eventos return QObject::eventFilter(obj, event); } }

Y aquí está cómo instalarlo en dos widgets:

KeyPressEater *keyPressEater = new KeyPressEater(this);
QPushButton *pushButton = new QPushButton(this);
QListView *listView = new QListView(this);

pushButton->installEventFilter(keyPressEater);
listView->installEventFilter(keyPressEater);

La clase QShortcut, por ejemplo, utiliza esta técnica para interceptar las pulsaciones de teclas de acceso directo.

Advertencia: Si eliminas el objeto receptor en tu función eventFilter(), asegúrate de devolver true. Si devuelves false, Qt enviará el evento al objeto eliminado y el programa se bloqueará.

Ten en cuenta que el objeto filtrador debe estar en el mismo hilo que este objeto. Si filterObj está en un hilo diferente, esta función no hace nada. Si filterObj o este objeto se mueven a un hilo diferente después de llamar a esta función, el filtro de eventos no será llamado hasta que ambos objetos vuelvan a tener la misma afinidad de hilo ( no se elimina).

Ver también removeEventFilter(), eventFilter(), y event().

[noexcept, since 6.11] bool QObject::isQmlExposed() const

Devuelve si el objeto ha sido creado por el motor QML o si la propiedad se ha establecido explícitamente a través de QJSEngine::setObjectOwnership().

Esta función se introdujo en Qt 6.11.

[since 6.4] bool QObject::isQuickItemType() const

Devuelve true si el objeto es un QQuickItem; en caso contrario devuelve false.

Llamar a esta función es equivalente a llamar a inherits("QQuickItem"), excepto que es mucho más rápido.

Esta función se introdujo en Qt 6.4.

[protected] bool QObject::isSignalConnected(const QMetaMethod &signal) const

Devuelve true si el signal está conectado al menos a un receptor, en caso contrario devuelve false.

signal debe ser un miembro señal de este objeto, de lo contrario el comportamiento es indefinido.

    static const QMetaMethod valueChangedSignal = QMetaMethod::fromSignal(&MyObject::valueChanged);
    if (QObject::isSignalConnected(valueChangedSignal)) {
        QByteArray data;
        data = get_the_value();       // expensive operation
        emit valueChanged(data);
    }

Como ilustra el fragmento de código anterior, puede utilizar esta función para evitar operaciones costosas o emitir una señal que nadie escucha.

Atención: En una aplicación multihilo, no se garantiza que las llamadas consecutivas a esta función produzcan los mismos resultados.

Advertencia: Esta función viola el principio de modularidad orientado a objetos. En particular, esta función no debe ser llamada desde una sobreescritura de connectNotify() o disconnectNotify(), ya que estas pueden ser llamadas desde cualquier hilo.

Véase también receivers().

bool QObject::isWidgetType() const

Devuelve true si el objeto es un widget; en caso contrario devuelve false.

Llamar a esta función es equivalente a llamar a inherits("QWidget"), excepto que es mucho más rápido.

bool QObject::isWindowType() const

Devuelve true si el objeto es una ventana; en caso contrario devuelve false.

Llamar a esta función es equivalente a llamar a inherits("QWindow"), excepto que es mucho más rápido.

void QObject::killTimer(int id)

Acaba con el temporizador con identificador de temporizador, id.

El identificador del temporizador es devuelto por startTimer() cuando se inicia un evento de temporizador.

Véase también timerEvent() y startTimer().

[since 6.8] void QObject::killTimer(Qt::TimerId id)

Esta es una función sobrecargada.

Esta función se introdujo en Qt 6.8.

[virtual] const QMetaObject *QObject::metaObject() const

Devuelve un puntero al metaobjeto de este objeto.

Un meta-objeto contiene información sobre una clase que hereda QObject, por ejemplo, nombre de la clase, nombre de la superclase, propiedades, señales y ranuras. Cada subclase de QObject que contenga la macro Q_OBJECT tendrá un metaobjeto.

La información del metaobjeto es necesaria para el mecanismo de conexión señal/ranura y el sistema de propiedades. La función inherits() también hace uso del meta-objeto.

Si no dispone de un puntero a una instancia de objeto real pero desea acceder al metaobjeto de una clase, puede utilizar staticMetaObject.

Ejemplo:

QObject *obj = new QPushButton;
obj->metaObject()->className();             // returns "QPushButton"

QPushButton::staticMetaObject.className();  // returns "QPushButton"

Véase también staticMetaObject.

bool QObject::moveToThread(QThread *targetThread)

Cambia la afinidad de hilos para este objeto y sus hijos y devuelve true en caso de éxito. El objeto no puede ser movido si tiene un padre. El procesamiento de eventos continuará en targetThread.

Para mover un objeto al hilo principal, utilice QApplication::instance() para recuperar un puntero a la aplicación actual y, a continuación, utilice QApplication::thread() para recuperar el hilo en el que vive la aplicación. Por ejemplo:

myObject->moveToThread(QApplication::instance()->thread());

Si targetThread es nullptr, todo el procesamiento de eventos para este objeto y sus hijos se detiene, puesto que ya no están asociados a ningún hilo.

Tenga en cuenta que todos los temporizadores activos para el objeto se reiniciarán. Los temporizadores se detienen primero en el subproceso actual y se reinician (con el mismo intervalo) en targetThread. Como resultado, mover constantemente un objeto entre subprocesos puede posponer indefinidamente los eventos del temporizador.

Se envía un evento QEvent::ThreadChange a este objeto justo antes de que se cambie la afinidad del hilo. Puedes manejar este evento para realizar cualquier procesamiento especial. Tenga en cuenta que cualquier nuevo evento que se envíe a este objeto será manejado en targetThread, siempre que no sea nullptr: cuando es nullptr, no puede ocurrir ningún procesamiento de eventos para este objeto o sus hijos, ya que ya no están asociados a ningún hilo.

Advertencia: Esta función no es thread-safe; el thread actual debe ser el mismo que la afinidad de thread actual. En otras palabras, esta función sólo puede "empujar" un objeto del subproceso actual a otro subproceso, no puede "tirar" un objeto de cualquier subproceso arbitrario al subproceso actual. Sin embargo, hay una excepción a esta regla: los objetos sin afinidad de subproceso pueden ser "arrastrados" al subproceso actual.

En las versiones de Qt anteriores a la 6.7, esta función no tenía valor de retorno (void).

Véase también thread().

[private signal] void QObject::objectNameChanged(const QString &objectName)

Esta señal se emite después de cambiar el nombre del objeto. El nuevo nombre del objeto se pasa como objectName.

Nota: Se trata de una señal privada. Puede ser utilizada en conexiones de señales pero no puede ser emitida por el usuario.

Nota: Señal notificadora para la propiedad objectName.

Véase también QObject::objectName.

QObject *QObject::parent() const

Devuelve un puntero al objeto padre.

Véase también setParent() y children().

QVariant QObject::property(const char *name) const

Devuelve el valor de la propiedad name del objeto.

Si no existe tal propiedad, la variante devuelta no es válida.

La información sobre todas las propiedades disponibles se proporciona a través de metaObject() y dynamicPropertyNames().

Véase también setProperty(), QVariant::isValid(), metaObject() y dynamicPropertyNames().

[protected] int QObject::receivers(const char *signal) const

Devuelve el número de receptores conectados a signal.

Dado que tanto las ranuras como las señales pueden utilizarse como receptores de señales, y que las mismas conexiones pueden realizarse muchas veces, el número de receptores es el mismo que el número de conexiones realizadas desde esta señal.

Al llamar a esta función, puede utilizar la macro SIGNAL() para pasar una señal específica:

if (receivers(SIGNAL(valueChanged(QByteArray))) > 0) {
    QByteArray data;
    get_the_value(&data);       // expensive operation
    emit valueChanged(data);
}

Como ilustra el fragmento de código anterior, puede utilizar esta función para evitar operaciones costosas o emitir una señal que nadie escuche.

Atención: En una aplicación multihilo, no se garantiza que las llamadas consecutivas a esta función produzcan los mismos resultados.

Advertencia: Esta función viola el principio de modularidad orientado a objetos. En particular, esta función no debe ser llamada desde una sobreescritura de connectNotify() o disconnectNotify(), ya que estas pueden ser llamadas desde cualquier hilo.

Véase también isSignalConnected().

void QObject::removeEventFilter(QObject *obj)

Elimina un objeto de filtro de eventos obj de este objeto. La petición es ignorada si tal filtro de eventos no ha sido instalado.

Todos los filtros de eventos para este objeto se eliminan automáticamente cuando se destruye este objeto.

Siempre es seguro eliminar un filtro de eventos, incluso durante la activación del filtro de eventos (es decir, desde la función eventFilter()).

Véase también installEventFilter(), eventFilter(), y event().

[protected] QObject *QObject::sender() const

Devuelve un puntero al objeto que envió la señal, si se llama en una ranura activada por una señal; en caso contrario, devuelve nullptr. El puntero sólo es válido durante la ejecución de la ranura que llama a esta función desde el contexto de subproceso de este objeto.

El puntero devuelto por esta función pierde su validez si el emisor es destruido, o si la ranura se desconecta de la señal del emisor.

Advertencia: Esta función viola el principio de modularidad orientado a objetos. Sin embargo, obtener acceso al emisor puede ser útil cuando muchas señales están conectadas a una única ranura.

Advertencia: Como se mencionó anteriormente, el valor de retorno de esta función no es válido cuando la ranura se llama a través de un Qt::DirectConnection desde un hilo diferente del hilo de este objeto. No utilice esta función en este tipo de escenario.

Véase también senderSignalIndex().

[protected] int QObject::senderSignalIndex() const

Devuelve el índice del metamétodo de la señal que llamó a la ranura actualmente en ejecución, que es un miembro de la clase devuelta por sender(). Si se llama fuera de una ranura activada por una señal, se devuelve -1.

Para las señales con parámetros predeterminados, esta función siempre devolverá el índice con todos los parámetros, independientemente de cuál se utilizó con connect(). Por ejemplo, la señal destroyed(QObject *obj = \nullptr) tendrá dos índices diferentes (con y sin el parámetro), pero esta función siempre devolverá el índice con un parámetro. Esto no se aplica cuando se sobrecargan señales con diferentes parámetros.

Advertencia: Esta función viola el principio de modularidad orientado a objetos. Sin embargo, obtener acceso al índice de la señal puede ser útil cuando muchas señales están conectadas a una única ranura.

Advertencia: El valor de retorno de esta función no es válido cuando se llama a la ranura a través de Qt::DirectConnection desde un subproceso distinto del subproceso de este objeto. No utilice esta función en este tipo de escenario.

Véase también sender(), QMetaObject::indexOfSignal(), y QMetaObject::method().

void QObject::setObjectName(const QString &name)

Establece el nombre del objeto en name.

Nota: Función Setter para la propiedad objectName.

Véase también objectName().

[since 6.4] void QObject::setObjectName(QAnyStringView name)

Nota: Función Setter para la propiedad objectName.

Esta es una función sobrecargada.

Esta función se introdujo en Qt 6.4.

void QObject::setParent(QObject *parent)

Hace que el objeto sea hijo de parent.

Véase también parent() y children().

bool QObject::setProperty(const char *name, const QVariant &value)

Establece el valor de la propiedad name del objeto a value.

Si la propiedad está definida en la clase utilizando Q_PROPERTY entonces se devuelve true en caso de éxito y false en caso contrario. Si la propiedad no está definida usando Q_PROPERTY, y por lo tanto no está listada en el meta-objeto, se añade como una propiedad dinámica y se devuelve false.

La información sobre todas las propiedades disponibles se proporciona a través de metaObject() y dynamicPropertyNames().

Las propiedades dinámicas se pueden volver a consultar mediante property() y se pueden eliminar estableciendo el valor de la propiedad en un valor no válido QVariant. Si se cambia el valor de una propiedad dinámica, se envía un QDynamicPropertyChangeEvent al objeto.

Nota: Las propiedades dinámicas que empiezan por "_q_" están reservadas para fines internos.

Véase también property(), metaObject(), dynamicPropertyNames() y QMetaProperty::write().

[since 6.6] bool QObject::setProperty(const char *name, QVariant &&value)

Esta función sobrecarga QObject::setProperty.

Esta función se introdujo en Qt 6.6.

[noexcept] bool QObject::signalsBlocked() const

Devuelve true si las señales están bloqueadas; en caso contrario devuelve false.

Las señales no están bloqueadas por defecto.

Véase también blockSignals() y QSignalBlocker.

int QObject::startTimer(int interval, Qt::TimerType timerType = Qt::CoarseTimer)

Esta es una función sobrecargada que iniciará un temporizador de tipo timerType y un tiempo de espera de interval milisegundos. Esto es equivalente a llamar:

startTimer(std::chrono::milliseconds{interval}, timerType);

A partir de Qt 6.10, establecer un intervalo negativo resultará en una advertencia en tiempo de ejecución y el valor se restablecerá a 1ms. Antes de Qt 6.10 un Temporizador Qt te permitía establecer un intervalo negativo pero se comportaba de forma sorprendente (por ejemplo parar el temporizador si estaba en marcha o no iniciarlo en absoluto).

Ver también timerEvent(), killTimer(), QChronoTimer, y QBasicTimer.

int QObject::startTimer(std::chrono::nanoseconds interval, Qt::TimerType timerType = Qt::CoarseTimer)

Inicia un temporizador y devuelve un identificador de temporizador, o devuelve cero si no pudo iniciar un temporizador.

Se producirá un evento de temporizador cada interval hasta que se llame a killTimer(). Si interval es igual a std::chrono::duration::zero(), entonces el evento del temporizador se produce una vez cada vez que el control vuelve al bucle de eventos, es decir, no hay más eventos nativos del sistema de ventanas que procesar.

A partir de Qt 6.10, establecer un intervalo negativo resultará en una advertencia en tiempo de ejecución y el valor se restablecerá a 1ms. Antes de Qt 6.10, un temporizador Qt permitía establecer un intervalo negativo pero se comportaba de forma sorprendente (por ejemplo, detenía el temporizador si estaba en marcha o no lo iniciaba en absoluto).

La función virtual timerEvent() es llamada con la clase de parámetro de evento QTimerEvent cuando ocurre un evento de temporizador. Reimplemente esta función para obtener eventos del temporizador.

Si se están ejecutando varios temporizadores, se puede utilizar el método QTimerEvent::id() para averiguar qué temporizador se activó.

Ejemplo:

clase MyObject : public QObject
{ Q_OBJECTpublic: MyObject(QObject *parent = nullptr); Q_SIGNALS: void valueChanged();protected: void timerEvent(QTimerEvent *event) override; }; MyObject::MyObject(QObject *parent) : QObject(parent) { using namespace std::chrono_literals; startTimer(50ms); startTimer(5s); startTimer(10min); startTimer(1h); }void MyObject::timerEvent(QTimerEvent * evento){
    qDebug() << "Timer ID:" << event->id();
}

Tenga en cuenta que la precisión del temporizador depende del sistema operativo y del hardware subyacentes.

El argumento timerType le permite personalizar la precisión del temporizador. Consulte Qt::TimerType para obtener información sobre los diferentes tipos de temporizadores. La mayoría de las plataformas soportan una precisión de 20 milisegundos; algunas proporcionan más. Si Qt no es capaz de entregar el número solicitado de eventos de temporizador, descartará silenciosamente algunos.

Las clases QTimer y QChronoTimer proporcionan una interfaz de programación de alto nivel con temporizadores de disparo único y señales de temporizador en lugar de eventos. También hay una clase QBasicTimer que es más ligera que QChronoTimer pero menos torpe que usar IDs de temporizador directamente.

Nota: A partir de Qt 6.8 la clase interval es std::chrono::nanoseconds, antes era std::chrono::milliseconds. Este cambio es compatible con versiones anteriores de Qt.

Nota: En Qt 6.8, QObject se cambió para usar Qt::TimerId para representar IDs de temporizador. Este método convierte TimerId a int por razones de retrocompatibilidad, sin embargo puedes usar Qt::TimerId para comprobar el valor devuelto por este método, por ejemplo:

    QObject *obj;
    //...
    const auto id = Qt::TimerId {obj->startTimer(100ms)};
    if (id != Qt::TimerId::Invalid)
    {
        // The timer has been started successfully
    }

Esta es una función sobrecargada.

Ver también timerEvent(), killTimer(), QChronoTimer, y QBasicTimer.

QThread *QObject::thread() const

Devuelve el hilo en el que vive el objeto.

Véase también moveToThread().

[virtual protected] void QObject::timerEvent(QTimerEvent *event)

Este manejador de eventos puede ser reimplementado en una subclase para recibir eventos de temporizador para el objeto.

QChronoTimer proporciona interfaces de nivel superior para la funcionalidad del temporizador, y también información más general sobre los temporizadores. El evento del temporizador se pasa en el parámetro event.

Véase también startTimer(), killTimer(), y event().

[static] QString QObject::tr(const char *sourceText, const char *disambiguation = nullptr, int n = -1)

Devuelve una versión traducida de sourceText, opcionalmente basada en una cadena disambiguation y el valor de n para cadenas que contengan plurales; en caso contrario devuelve QString::fromUtf8(sourceText) si no se dispone de una cadena traducida apropiada.

Ejemplo:

void SpreadSheet::setupMenuBar()
{
    QMenu *fileMenu = menuBar()->addMenu(tr("&File"));
    ...

Si se utiliza el mismo sourceText en diferentes funciones dentro del mismo contexto, se puede pasar una cadena de identificación adicional en disambiguation (nullptr por defecto).

Ejemplo:

MyWindow::MyWindow()
{
    QLabel *senderLabel = new QLabel(tr("Name:"));
    QLabel *recipientLabel = new QLabel(tr("Name:", "recipient"));
    ...

Véase Writing Source Code for Translation para una descripción detallada de los mecanismos de traducción de Qt en general, y la sección Disambiguate Identical Text para información sobre la desambiguación.

Advertencia: Este método es reentrante sólo si todos los traductores están instalados antes de llamar a este método. No es posible instalar o eliminar traductores mientras se realizan traducciones. Si lo hace, es probable que se produzcan fallos u otros comportamientos no deseados.

Ver también QCoreApplication::translate() e Internacionalización con Qt.

Documentación de variables miembro

const QMetaObject QObject::staticMetaObject

Esta variable almacena el metaobjeto de la clase.

Un meta-objeto contiene información sobre una clase que hereda QObject, por ejemplo, nombre de la clase, nombre de la superclase, propiedades, señales y ranuras. Toda clase que contenga la macro Q_OBJECT tendrá también un metaobjeto.

La información del metaobjeto es necesaria para el mecanismo de conexión señal/ranura y el sistema de propiedades. La función inherits() también hace uso del meta-objeto.

Si tiene un puntero a un objeto, puede utilizar metaObject() para recuperar el metaobjeto asociado a ese objeto.

Ejemplo:

QPushButton::staticMetaObject.className();  // returns "QPushButton"

QObject *obj = new QPushButton;
obj->metaObject()->className();             // returns "QPushButton"

Véase también metaObject().

No miembros relacionados

QObjectList

Sinónimo de QList<QObject *>.

[since 6.8] enum class TimerId

Se utiliza para representar identificadores de temporizador (por ejemplo, QTimer y QChronoTimer). El tipo subyacente es int. Puede utilizar qToUnderlying() para convertir Qt::TimerId a int.

ConstanteValorDescripción
QObject::TimerId::Invalid0Representa un ID de temporizador no-op; su uso depende del contexto, por ejemplo, este es el valor devuelto por QObject::startTimer() para indicar que falló al iniciar un temporizador; mientras que QChronoTimer::id() devuelve este valor cuando el temporizador está inactivo, es decir, timer.isActive() devuelve false.

Este enum se introdujo en Qt 6.8.

Véase también QTimer::id(), QChronoTimer::id(), y QObject::startTimer().

template <typename T> T qobject_cast(QObject *object)

template <typename T> T qobject_cast(const QObject *object)

Devuelve el object dado convertido a tipo T si el objeto es de tipo T (o de una subclase); en caso contrario devuelve nullptr. Si object es nullptr también devolverá nullptr.

La clase T debe heredar (directa o indirectamente) QObject y estar declarada con la macro Q_OBJECT.

Se considera que una clase se hereda a sí misma.

Ejemplo:

QObject *obj = new QTimer;          // QTimer inherits QObject

QTimer *timer = qobject_cast<QTimer *>(obj);
// timer == (QObject *)obj

QAbstractButton *button = qobject_cast<QAbstractButton *>(obj);
// button == nullptr

La función qobject_cast() se comporta de forma similar a la función estándar de C++ dynamic_cast(), con las ventajas de que no requiere soporte RTTI y funciona a través de los límites de las bibliotecas dinámicas.

qobject_cast() también puede utilizarse junto con interfaces.

Advertencia: Si T no se declara con la macro Q_OBJECT, el valor de retorno de esta función es indefinido.

Véase también QObject::inherits().

Documentación de macros

[since 6.7] QT_NO_CONTEXTLESS_CONNECT

Definir esta macro desactivará la sobrecarga de QObject::connect() que conecta una señal a un functor, sin especificar también un QObject como objeto receptor/contexto (es decir, la sobrecarga de 3 argumentos de QObject::connect()).

Utilizar la sobrecarga sin contexto es propenso a errores, porque es fácil conectar a functores que dependen de algún estado local del extremo receptor. Si dicho estado local se destruye, la conexión no se desconecta automáticamente.

Además, estas conexiones son siempre conexiones directas, lo que puede causar problemas en escenarios multihilo (por ejemplo, si la señal se emite desde otro hilo).

Esta macro se introdujo en Qt 6.7.

Ver también QObject::connect y Qt::ConnectionType.

QT_NO_NARROWING_CONVERSIONS_IN_CONNECT

La definición de esta macro desactivará el estrechamiento y las conversiones de punto flotante a integral entre los argumentos transportados por una señal y los argumentos aceptados por una ranura, cuando la señal y la ranura estén conectadas utilizando la sintaxis basada en PMF.

Véase también QObject::connect.

Q_CLASSINFO(Name, Value)

Esta macro asocia información extra a la clase, que está disponible utilizando QObject::metaObject(). La información adicional adopta la forma de una cadena Name y una cadena literal Value.

Ejemplo:

class MyClass : public QObject
{
    Q_OBJECT
    Q_CLASSINFO("Author", "Pierre Gendron")
    Q_CLASSINFO("URL", "http://www.my-organization.qc.ca")

public:
    //...
};

Qt utiliza la macro en Qt D-Bus y Qt Qml de los módulos. Por ejemplo, al definir tipos de objeto QML en C++, se puede designar una propiedad como predeterminada:

Q_CLASSINFO("DefaultProperty", "content")

Véase también QMetaObject::classInfo(), Uso de adaptadores Qt D-Bus y Definición de tipos QML desde C++.

Q_EMIT

Utilice esta macro para reemplazar la palabra clave emit para emitir señales, cuando desee utilizar Qt Signals and Slots con un mecanismo de señales/ranuras de terceros.

La macro se utiliza normalmente cuando se especifica no_keywords con la variable CONFIG en el archivo .pro, pero puede utilizarse incluso cuando no se especifica no_keywords.

Q_ENUM(...)

Esta macro registra un tipo enum en el sistema de metaobjetos. Debe colocarse después de la declaración enum en una clase que tenga la macro Q_OBJECT, Q_GADGET o Q_GADGET_EXPORT. Para espacios de nombres, utilice Q_ENUM_NS() en su lugar.

Por ejemplo:

class MyClass : public QObject
{
    Q_OBJECT

public:
    MyClass(QObject *parent = nullptr);
    ~MyClass();

    enum Priority { High, Low, VeryHigh, VeryLow };
    Q_ENUM(Priority)
    void setPriority(Priority priority);
    Priority priority() const;
};

Las enumeraciones que se declaran con Q_ENUM tienen su QMetaEnum registrado en el QMetaObject. También puede utilizar QMetaEnum::fromType() para obtener el QMetaEnum.

Las enumeraciones registradas se registran automáticamente también en el meta sistema de tipos de Qt, dándolas a conocer a QMetaType sin necesidad de utilizar Q_DECLARE_METATYPE(). Esto habilitará características útiles; por ejemplo, si se utilizan en QVariant, se pueden convertir en cadenas. Del mismo modo, al pasarlos a QDebug se imprimirán sus nombres.

Tenga en cuenta que los valores de las enumeraciones se almacenan como int firmados en el meta sistema de objetos. Registrar enumeraciones con valores fuera del rango de valores válidos para int provocará desbordamientos y un comportamiento potencialmente indefinido al acceder a ellas a través del sistema de metaobjetos. QML, por ejemplo, accede a las enumeraciones registradas a través del sistema de metaobjetos.

Véase también Sistema de propiedades de Qt.

Q_ENUM_NS(...)

Esta macro registra un tipo enum en el sistema de metaobjetos. Debe colocarse después de la declaración enum en un espacio de nombres que tenga la macro Q_NAMESPACE. Es lo mismo que Q_ENUM pero en un espacio de nombres.

Las enumeraciones que se declaran con Q_ENUM_NS tienen su QMetaEnum registrado en el espacio de nombres QMetaObject. También puede utilizar QMetaEnum::fromType() para obtener QMetaEnum.

Las enumeraciones registradas se registran automáticamente también en el meta sistema de tipos de Qt, dándolas a conocer a QMetaType sin necesidad de utilizar Q_DECLARE_METATYPE(). Esto habilitará características útiles; por ejemplo, si se utilizan en QVariant, se pueden convertir en cadenas. Del mismo modo, al pasarlos a QDebug se imprimirán sus nombres.

Tenga en cuenta que los valores de las enumeraciones se almacenan como int firmados en el meta sistema de objetos. Registrar enumeraciones con valores fuera del rango de valores válidos para int provocará desbordamientos y un comportamiento potencialmente indefinido al acceder a ellas a través del sistema de metaobjetos. QML, por ejemplo, accede a las enumeraciones registradas a través del sistema de metaobjetos.

Véase también Sistema de propiedades de Qt.

Q_FLAG(...)

Esta macro registra un único flags type en el sistema de metaobjetos. Se utiliza normalmente en la definición de una clase para declarar que los valores de un enum dado pueden utilizarse como indicadores y combinarse utilizando el operador OR a nivel de bits. Para espacios de nombres, utilice Q_FLAG_NS() en su lugar.

La macro debe colocarse después de la declaración del enum. La declaración del tipo flags se realiza utilizando la macro Q_DECLARE_FLAGS().

Por ejemplo, en QItemSelectionModel, la bandera SelectionFlags se declara de la siguiente manera:

class Q_CORE_EXPORT QItemSelectionModel : public QObject
{
    Q_OBJECT
    ...
public:

    enum SelectionFlag {
        NoUpdate       = 0x0000,
        Clear          = 0x0001,
        Select         = 0x0002,
        Deselect       = 0x0004,
        Toggle         = 0x0008,
        Current        = 0x0010,
        Rows           = 0x0020,
        Columns        = 0x0040,
        SelectCurrent  = Select | Current,
        ToggleCurrent  = Toggle | Current,
        ClearAndSelect = Clear | Select
    };

    Q_DECLARE_FLAGS(SelectionFlags, SelectionFlag)
    Q_FLAG(SelectionFlags)

};

Nota: La macro Q_FLAG se encarga de registrar los valores individuales de las banderas con el sistema de meta-objetos, por lo que no es necesario utilizar Q_ENUM() además de esta macro.

Véase también Sistema de propiedades de Qt.

Q_FLAG_NS(...)

Esta macro registra un único flags type en el sistema de metaobjetos. Se utiliza en un espacio de nombres que tenga la macro Q_NAMESPACE, para declarar que los valores de un enum dado pueden utilizarse como indicadores y combinarse utilizando el operador OR a nivel de bits. Es lo mismo que Q_FLAG pero en un espacio de nombres.

La macro debe colocarse después de la declaración enum.

Nota: La macro Q_FLAG_NS se encarga de registrar los valores individuales de las banderas con el sistema de meta-objetos, por lo que no es necesario utilizar Q_ENUM_NS() además de esta macro.

Ver también Sistema de Propiedades de Qt.

Q_GADGET

La macro Q_GADGET es una versión más ligera de la macro Q_OBJECT para clases que no heredan de QObject pero que aún quieren utilizar algunas de las capacidades de reflexión ofrecidas por QMetaObject.

Nota: Esta expansión de macro termina con un private: especificador de acceso. Si declaras miembros inmediatamente después de esta macro, esos miembros también serán privados. Para añadir miembros públicos (o protegidos) justo después de la macro, utilice un especificador de acceso public: (o protected:).

Los Q_GADGET pueden tener Q_ENUM, Q_PROPERTY y Q_INVOKABLE, pero no pueden tener señales ni ranuras.

Q_GADGET hace disponible un miembro de clase, staticMetaObject. staticMetaObject es de tipo QMetaObject y proporciona acceso a los enums declarados con Q_ENUM.

Véase también Q_GADGET_EXPORT.

[since 6.3] Q_GADGET_EXPORT(EXPORT_MACRO)

La macro Q_GADGET_EXPORT funciona exactamente igual que la macro Q_GADGET. Sin embargo, la variable staticMetaObject que se pone a disposición (véase Q_GADGET) se declara con el cualificador EXPORT_MACRO suministrado. Esto es útil si el objeto necesita ser exportado desde una biblioteca dinámica, pero la clase que lo contiene no debe serlo (por ejemplo, porque consiste principalmente en funciones en línea).

Nota: Esta expansión de macro termina con un private: especificador de acceso. Si declara miembros inmediatamente después de esta macro, esos miembros también serán privados. Para añadir miembros públicos (o protegidos) justo después de la macro, utilice un especificador de acceso public: (o protected:).

Por ejemplo:

class Point {
    Q_GADGET_EXPORT(EXPORT_MACRO)
    Q_PROPERTY(int x MEMBER x)
    Q_PROPERTY(int y MEMBER y)
    ~~~

Esta macro se introdujo en Qt 6.3.

Véase también Q_GADGET y Creación de bibliotecas compartidas.

Q_INTERFACES(...)

Esta macro indica a Qt qué interfaces implementa la clase. Se utiliza cuando se implementan plugins.

Véase también Q_DECLARE_INTERFACE(), Q_PLUGIN_METADATA(), y Cómo crear plugins de Qt.

Q_INVOKABLE

Aplique esta macro a las declaraciones de funciones miembro para permitir su invocación a través del sistema de metaobjetos. La macro se escribe antes del tipo de retorno, como se muestra en el siguiente ejemplo:

class Window : public QWidget
{
    Q_OBJECT

public:
    Window();
    void normalMethod();
    Q_INVOKABLE void invokableMethod();
};

La función invokableMethod() se marca utilizando Q_INVOKABLE, haciendo que se registre en el sistema de meta-objetos y permitiendo que sea invocada utilizando QMetaObject::invokeMethod(). Dado que la función normalMethod() no está registrada de esta forma, no puede ser invocada utilizando QMetaObject::invokeMethod().

Si una función miembro invocable devuelve un puntero a QObject o a una subclase de QObject y se invoca desde QML, se aplican reglas de propiedad especiales. Consulte Conversión de tipos de datos entre QML y C++ para obtener más información.

[since 6.0] Q_MOC_INCLUDE

La macro Q_MOC_INCLUDE puede usarse dentro o fuera de una clase, y decirle al Meta-Object Compiler que añada un include.

// Put this in your code and the generated code will include this header.
Q_MOC_INCLUDE("myheader.h")

Esto es útil si los tipos que usas como propiedades o argumentos de señales/ranuras están declarados hacia adelante.

Esta macro se introdujo en Qt 6.0.

Q_NAMESPACE

La macro Q_NAMESPACE puede utilizarse para añadir capacidades QMetaObject a un espacio de nombres.

Los Q_NAMESPACEs pueden tener Q_CLASSINFO, Q_ENUM_NS, Q_FLAG_NS, pero no pueden tener Q_ENUM, Q_FLAG, Q_PROPERTY, Q_INVOKABLE, signals ni slots.

Q_NAMESPACE hace que una variable externa, staticMetaObject, esté disponible. staticMetaObject es de tipo QMetaObject y proporciona acceso a los enums declarados con Q_ENUM_NS/Q_FLAG_NS.

Por ejemplo:

namespace test {
Q_NAMESPACE
...

Véase también Q_NAMESPACE_EXPORT.

Q_NAMESPACE_EXPORT(EXPORT_MACRO)

La macro Q_NAMESPACE_EXPORT puede utilizarse para añadir capacidades QMetaObject a un espacio de nombres.

Funciona exactamente igual que la macro Q_NAMESPACE. Sin embargo, la variable externa staticMetaObject que se define en el espacio de nombres se declara con el calificador EXPORT_MACRO suministrado. Esto resulta útil si el objeto debe exportarse desde una biblioteca dinámica.

Por ejemplo:

namespace test {
Q_NAMESPACE_EXPORT(EXPORT_MACRO)
...

Véase también Q_NAMESPACE y Creación de bibliotecas compartidas.

Q_OBJECT

La macro Q_OBJECT se utiliza para habilitar las características de los meta-objetos, como propiedades dinámicas, señales y ranuras.

Puede añadir la macro Q_OBJECT a cualquier sección de la definición de una clase que declare sus propias señales y ranuras o que utilice otros servicios proporcionados por el sistema de meta-objetos de Qt.

Nota: Esta expansión de macro termina con un private: especificador de acceso. Si declara miembros inmediatamente después de esta macro, esos miembros también serán privados. Para añadir miembros públicos (o protegidos) justo después de la macro, utilice un especificador de acceso public: (o protected:).

Ejemplo:

#include <QObject>

class Counter : public QObject
{
    Q_OBJECT

// Note. The Q_OBJECT macro starts a private section.
// To declare public members, use the 'public:' access modifier.
public:
    Counter() { m_value = 0; }

    int value() const { return m_value; }

public slots:
    void setValue(int value);

signals:
    void valueChanged(int newValue);

private:
    int m_value;
};

Nota: Esta macro requiere que la clase sea una subclase de QObject. Utilice Q_GADGET o Q_GADGET_EXPORT en lugar de Q_OBJECT para habilitar el soporte del sistema de metaobjetos para enums en una clase que no sea una subclase de QObject.

Ver también Sistema de Meta-Objetos, Señales y Slots, y Sistema de Propiedades de Qt.

Q_PROPERTY(...)

Esta macro se utiliza para declarar propiedades en clases que heredan de QObject. Las propiedades se comportan como los miembros de datos de la clase, pero tienen características adicionales accesibles a través del Sistema de Meta-Objetos.

Q_PROPERTY(type name
           (READ getFunction [WRITE setFunction] |
            MEMBER memberName [(READ getFunction | WRITE setFunction)])
           [RESET resetFunction]
           [NOTIFY notifySignal]
           [REVISION int | REVISION(int[, int])]
           [DESIGNABLE bool]
           [SCRIPTABLE bool]
           [STORED bool]
           [USER bool]
           [BINDABLE bindableProperty]
           [CONSTANT]
           [FINAL]
           [VIRTUAL]
           [OVERRIDE]
           [REQUIRED])

Se requieren el nombre y el tipo de la propiedad y la función READ. El tipo puede ser cualquiera soportado por QVariant, o puede ser un tipo definido por el usuario. Los demás elementos son opcionales, pero una función WRITE es común. Los atributos son verdaderos por defecto, excepto USER, que es falso por defecto.

Por ejemplo:

Q_PROPERTY(QString title READ title WRITE setTitle USER true)

Para más detalles sobre cómo usar esta macro, y un ejemplo más detallado de su uso, vea la discusión sobre el Sistema de Propiedades de Qt.

Véase también Sistema de propiedades de Qt.

Q_REVISION

Aplique esta macro a las declaraciones de funciones miembro para etiquetarlas con un número de revisión en el sistema de metaobjetos. La macro se escribe antes del tipo de retorno, como se muestra en el siguiente ejemplo:

class Window : public QWidget
{
    Q_OBJECT
    Q_PROPERTY(int normalProperty READ normalProperty)
    Q_PROPERTY(int newProperty READ newProperty REVISION(2, 1))

public:
    Window();
    int normalProperty();
    int newProperty();
public slots:
    void normalMethod();
    Q_REVISION(2, 1) void newMethod();
};

Esto es útil cuando se utiliza el sistema de meta-objetos para exponer dinámicamente objetos a otra API, ya que puede hacer coincidir la versión esperada por múltiples versiones de la otra API. Considere el siguiente ejemplo simplificado:

    Window window;
    int expectedRevision = 0;
    const QMetaObject *windowMetaObject = window.metaObject();
    for (int i=0; i < windowMetaObject->methodCount(); i++)
        if (windowMetaObject->method(i).revision() <= expectedRevision)
            exposeMethod(windowMetaObject->method(i));
    for (int i=0; i < windowMetaObject->propertyCount(); i++)
        if (windowMetaObject->property(i).revision() <= expectedRevision)
            exposeProperty(windowMetaObject->property(i));

Utilizando la misma clase Window que en el ejemplo anterior, newProperty y newMethod sólo se expondrían en este código cuando la versión esperada sea 2.1 o superior.

Dado que se considera que todos los métodos están en la revisión 0 si no están etiquetados, una etiqueta de Q_REVISION(0) o Q_REVISION(0, 0) no es válida y se ignora.

Puede pasar uno o dos parámetros enteros a Q_REVISION. Si pasa un parámetro, denota sólo la versión menor. Esto significa que la versión mayor no se especifica. Si pasa dos, el primer parámetro es la versión principal y el segundo la versión secundaria.

Esta etiqueta no es utilizada por el propio sistema de metaobjetos. Actualmente sólo la utiliza el módulo QtQml.

Para una etiqueta de cadena más genérica, véase QMetaMethod::tag()

Véase también QMetaMethod::revision().

Q_SET_OBJECT_NAME(Object)

Esta macro asigna a Object el "Objeto" objectName.

No importa si Object es un puntero o no, la macro lo averigua por sí misma.

Véase también QObject::objectName().

Q_SIGNAL

Se trata de una macro adicional que permite marcar una única función como señal. Puede ser bastante útil, especialmente cuando se utiliza un analizador de código fuente de terceros que no entiende los grupos signals o Q_SIGNALS.

Utilice esta macro para reemplazar la palabra clave signals en las declaraciones de clase, cuando desee utilizar Qt Signals and Slots con un mecanismo de señal/ranura de terceros.

La macro se utiliza normalmente cuando se especifica no_keywords con la variable CONFIG en el archivo .pro, pero puede utilizarse incluso cuando no se especifica no_keywords.

Q_SIGNALS

Utilice esta macro para reemplazar la palabra clave signals en las declaraciones de clase, cuando desee utilizar Qt Signals and Slots con un mecanismo de señal/slot de terceros.

La macro se utiliza normalmente cuando se especifica no_keywords con la variable CONFIG en el archivo .pro, pero puede utilizarse incluso cuando no se especifica no_keywords.

Q_SLOT

Se trata de una macro adicional que permite marcar una única función como ranura. Puede ser bastante útil, especialmente cuando se utiliza un analizador de código fuente de terceros que no entiende los grupos slots o Q_SLOTS.

Utilice esta macro para reemplazar la palabra clave slots en las declaraciones de clase, cuando desee utilizar Qt Signals and Slots con un mecanismo de señal/ranura de terceros.

La macro se utiliza normalmente cuando se especifica no_keywords con la variable CONFIG en el archivo .pro, pero puede utilizarse incluso cuando no se especifica no_keywords.

Q_SLOTS

Utilice esta macro para reemplazar la palabra clave slots en las declaraciones de clase, cuando desee utilizar Qt Signals and Slots con un mecanismo de señal/slot de terceros.

La macro se utiliza normalmente cuando se especifica no_keywords con la variable CONFIG en el archivo .pro, pero puede utilizarse incluso cuando no se especifica no_keywords.

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