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++:
- un potente mecanismo de comunicación entre objetos llamado señales y ranuras (signals and slots)
- propiedades de objetos consultables y diseñables
- potentes eventos y filtros de eventos
- traducción contextual de cadenas para la internacionalización
- sofisticados temporizadores controlados por intervalos que permiten integrar con elegancia muchas tareas en una interfaz gráfica de usuario controlada por eventos
- Árboles de objetos jerárquicos y consultables que organizan la propiedad de los objetos de forma natural.
- punteros protegidos (QPointer) que se ponen automáticamente a 0 cuando se destruye el objeto referenciado, a diferencia de los punteros normales de C++ que se convierten en punteros colgantes cuando se destruyen sus objetos
- un cast dinámico que funciona a través de los límites de la biblioteca.
- soporte para la creación de tipos personalizados.
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.
Permite el acceso con borrado de tipo a contenedores asociativos | |
Información adicional sobre una clase | |
Funcionalidad común para contenedores secuenciales y asociativos | |
Metadatos sobre un enumerador | |
Metadatos sobre una función miembro | |
Contiene metainformación sobre objetos Qt | |
Metadatos sobre una propiedad | |
Permite el acceso de tipo borrado a contenedores secuenciales | |
Gestiona tipos con nombre en el sistema de metaobjetos | |
La clase base de todos los objetos Qt | |
Vigila el tiempo de vida de múltiples QObjects | |
Clase plantilla que proporciona punteros protegidos a QObject | |
Envoltura a prueba de excepciones alrededor de QObject::blockSignals() | |
Agrupa señales de emisores identificables | |
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.