Creación de extensiones de widgets personalizados
Una vez que tenga un plugin de widget personalizado para Qt Widgets Designer, puede proporcionarle el comportamiento y la funcionalidad esperados dentro del espacio de trabajo de Qt Widgets Designer, utilizando extensiones de widget personalizadas.
Tipos de extensiones
Hay varios tipos de extensiones disponibles en Qt Widgets Designer. Puedes usar todas estas extensiones en el mismo patrón, sólo reemplazando la respectiva clase base de extensión.
QDesignerContainerExtension es necesaria cuando se implementa un contenedor multipágina personalizado.
![]() | QDesignerTaskMenuExtension QDesignerTaskMenuExtension es útil para widgets personalizados. Proporciona una extensión que permite añadir entradas de menú personalizadas al menú de tareas de Qt Widgets Designer. El ejemplo de Extensión del Menú de Tareas ilustra cómo utilizar esta clase. |
![]() | QDesignerContainerExtension QDesignerContainerExtension es necesaria cuando se implementa un contenedor multipágina personalizado. Proporciona una extensión que permite añadir y eliminar páginas para un plugin de contenedor multipágina en Qt Widgets Designer. El ejemplo de Extensión de Contenedor explica con más detalle cómo utilizar esta clase. Nota: No es posible añadir propiedades personalizadas por página para algunos widgets (por ejemplo, QTabWidget) debido a la forma en que están implementados. |
![]() | QDesignerMemberSheetExtension La clase QDesignerMemberSheetExtension permite manipular las funciones miembro de un widget que se muestran al conectar señales y ranuras. |
![]() | QDesignerPropertySheetExtension, QDesignerDynamicPropertySheetExtension Estas clases de extensión permiten controlar cómo se muestran las propiedades de un widget en el editor de propiedades de Qt Widgets Designer. |
Qt Widgets Designer utiliza las clases QDesignerPropertySheetExtension y QDesignerMemberSheetExtension para alimentar sus editores de propiedades y señales y ranuras. Siempre que se seleccione un widget en su espacio de trabajo, Qt Widgets Designer consultará la extensión de la hoja de propiedades del widget; del mismo modo, siempre que se solicite una conexión entre dos widgets, Qt Widgets Designer consultará las extensiones de la hoja de miembros de los widgets.
Atención: Todos los widgets tienen hojas de propiedades y de miembros por defecto. Si implementas extensiones personalizadas de hojas de propiedades o miembros, tus extensiones personalizadas anularán las hojas por defecto.
Creación de una extensión
Para crear una extensión debes heredar tanto de QObject como de la clase base apropiada, y reimplementar sus funciones. Dado que estamos implementando una interfaz, debemos asegurarnos de que se da a conocer al meta sistema de objetos utilizando la macro Q_INTERFACES() en la definición de la clase de extensión. Por ejemplo:
class MyExtension: public QObject, public QdesignerContainerExtension { Q_OBJECT Q_INTERFACE(QDesignerContainerExtension) ... }
Esto permite a Qt Widgets Designer utilizar la función qobject_cast() para buscar interfaces compatibles utilizando únicamente un puntero QObject.
Exposición de una extensión a Qt Widgets Designer
En Qt Widgets Designer las extensiones no se crean hasta que son necesarias. Por esta razón, al implementar extensiones, debes subclasificar QExtensionFactory para crear una clase que sea capaz de crear instancias de tus extensiones. Además, debe registrar su fábrica con el gestor de extensiones de Qt Widgets Designer; el gestor de extensiones se encarga de la construcción de extensiones.
Cuando se solicita una extensión, el gestor de extensiones de Qt Widgets Designer recorrerá sus fábricas registradas llamando a QExtensionFactory::createExtension() para cada una de ellas hasta que encuentre una que sea capaz de crear la extensión solicitada para el widget seleccionado. Esta fábrica creará una instancia de la extensión.

Creación de una fábrica de extensiones
La clase QExtensionFactory proporciona una fábrica de extensiones estándar, pero también puede utilizarse como interfaz para fábricas de extensiones personalizadas.
El propósito es reimplementar la función QExtensionFactory::createExtension(), haciéndola capaz de crear tu extensión, como una extensión contenedor MultiPageWidget.
Puedes crear un nuevo QExtensionFactory y reimplementar la función QExtensionFactory::createExtension():
QObject *ANewExtensionFactory::createExtension(QObject *object, const QString &iid, QObject *parent) const { if (iid != Q_TYPEID(QDesignerContainerExtension)) return 0; if (MyCustomWidget *widget = qobject_cast<MyCustomWidget*> (object)) return new MyContainerExtension(widget, parent); return 0; }
o puedes utilizar una fábrica existente, ampliando la función QExtensionFactory::createExtension() para que la fábrica pueda crear también tu extensión personalizada:
QObject *AGeneralExtensionFactory::createExtension(QObject *object, const QString &iid, QObject *parent) const { MyCustomWidget *widget = qobject_cast<MyCustomWidget*>(object); if (widget && (iid == Q_TYPEID(QDesignerTaskMenuExtension))) { return new MyTaskMenuExtension(widget, parent); } else if (widget && (iid == Q_TYPEID(QDesignerContainerExtension))) { return new MyContainerExtension(widget, parent); } else { return 0; } }
Acceso a Qt Widgets Designer's Extension Manager
Al implementar un plugin de widget personalizado, debe subclasificar el QDesignerCustomWidgetInterface para exponer su plugin a Qt Widgets Designer. Esto se explica con más detalle en la sección Creación de widgets personalizados para Qt Widgets Designer. El registro de una fábrica de extensiones se realiza normalmente en la función QDesignerCustomWidgetInterface::initialize():
void MyPlugin::initialize(QDesignerFormEditorInterface *formEditor) { if (initialized) return; QExtensionManager *manager = formEditor->extensionManager(); Q_ASSERT(manager != 0); manager->registerExtensions(new MyExtensionFactory(manager), Q_TYPEID(QDesignerTaskMenuExtension)); initialized = true; }
El parámetro formEditor en la función QDesignerCustomWidgetInterface::initialize() es un puntero al objeto QDesignerFormEditorInterface actual de Qt Widgets Designer. Debe utilizar la función QDesignerFormEditorInterface::extensionManager() para recuperar una interfaz al gestor de extensiones de Qt Widgets Designer. A continuación, utilice la función QExtensionManager::registerExtensions() para registrar su fábrica de extensiones personalizada.
Ejemplos relacionados
Para obtener más información sobre la creación de extensiones de widgets personalizados en Qt Widgets Designer, consulte los ejemplos Extensión de menú de tareas y Extensión de contenedor.
© 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.



