En esta página

Modelo de objeto

El modelo de objetos estándar de C++ proporciona un soporte en tiempo de ejecución muy eficiente para el paradigma de objetos. Sin embargo, su naturaleza estática resulta inflexible en determinados ámbitos problemáticos. La programación de interfaces gráficas de usuario es un campo que requiere tanto eficiencia en tiempo de ejecución como un alto nivel de flexibilidad. Qt lo consigue combinando la velocidad de C++ con la flexibilidad del modelo de objetos de Qt.

Qt añade estas características a C++:

Muchas de estas características de Qt se implementan con técnicas estándar de C++, basadas en la herencia de QObject. Otras, como el mecanismo de comunicación de objetos y el sistema de propiedades dinámicas, requieren el Meta-Object System proporcionado por el propio Meta-Object Compiler de Qt (moc).

El sistema de meta-objetos es una extensión de C++ que hace que el lenguaje se adapte mejor a la verdadera programación de interfaces gráficas de usuario por componentes.

Clases importantes

Estas clases forman la base del Modelo de Objetos Qt.

QMetaAssociation

Permite el acceso con borrado de tipo a contenedores asociativos

QMetaClassInfo

Información adicional sobre una clase

QMetaContainer

Funcionalidad común para contenedores secuenciales y asociativos

QMetaEnum

Metadatos sobre un enumerador

QMetaMethod

Metadatos sobre una función miembro

QMetaObject

Contiene metainformación sobre objetos Qt

QMetaProperty

Metadatos sobre una propiedad

QMetaSequence

Permite el acceso de tipo borrado a contenedores secuenciales

QMetaType

Gestiona tipos con nombre en el sistema de metaobjetos

QObject

La clase base de todos los objetos Qt

QObjectCleanupHandler

Vigila el tiempo de vida de múltiples QObjects

QPointer

Clase plantilla que proporciona punteros protegidos a QObject

QSignalBlocker

Envoltura a prueba de excepciones alrededor de QObject::blockSignals()

QSignalMapper

Agrupa señales de emisores identificables

QVariant

Actúa como una unión para los tipos de datos Qt más comunes

Objetos Qt: Identidad vs Valor

Algunas de las características añadidas listadas arriba para el Modelo de Objetos Qt, requieren que pensemos en los Objetos Qt como identidades, no como valores. Los valores se copian o asignan; las identidades se clonan. Clonar significa crear una nueva identidad, no una copia exacta de la anterior. Por ejemplo, los gemelos tienen identidades diferentes. Pueden parecer idénticos, pero tienen nombres diferentes, ubicaciones diferentes y pueden tener redes sociales completamente distintas.

Luego clonar una identidad es una operación más compleja que copiar o asignar un valor. Podemos ver lo que esto significa en el Modelo de Objetos Qt.

Un Objeto Qt...

  • puede tener un único QObject::objectName(). Si copiamos un Objeto Qt, ¿qué nombre debemos dar a la copia?
  • tiene una ubicación en una jerarquía de objetos. Si copiamos un Objeto Qt, ¿dónde debería estar ubicada la copia?
  • puede conectarse a otros Objetos Qt para emitirles señales o para recibir señales emitidas por ellos. Si copiamos un Objeto Qt, ¿cómo debemos transferir estas conexiones a la copia?
  • puede tener nuevas propiedades añadidas en tiempo de ejecución que no están declaradas en la clase C++. Si copiamos un objeto Qt, ¿debe la copia incluir las propiedades que se añadieron al original?

Por estas razones, los objetos Qt deben tratarse como identidades, no como valores. Las identidades se clonan, no se copian ni se asignan, y clonar una identidad es una operación más compleja que copiar o asignar un valor. Por lo tanto, QObject y todas las subclases de QObject (directas o indirectas) tienen su copy constructor and assignment operator desactivado.

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