En esta página

QExtensionManager Class

La clase QExtensionManager proporciona facilidades de gestión de extensiones para Qt Widgets Designer. Más...

Cabecera: #include <QExtensionManager>
CMake: find_package(Qt6 REQUIRED COMPONENTS Designer)
target_link_libraries(mytarget PRIVATE Qt6::Designer)
qmake: QT += designer
Hereda: QObject y QAbstractExtensionManager

Funciones Públicas

QExtensionManager(QObject *parent = nullptr)
virtual ~QExtensionManager()

Funciones públicas reimplementadas

virtual QObject *extension(QObject *object, const QString &iid) const override
virtual void registerExtensions(QAbstractExtensionFactory *factory, const QString &iid = QString()) override
virtual void unregisterExtensions(QAbstractExtensionFactory *factory, const QString &iid = QString()) override
T qt_extension(QAbstractExtensionManager *manager, QObject *object)

Macros

Q_DECLARE_EXTENSION_INTERFACE(ExtensionName, Identifier)

Descripción detallada

En Qt Widgets Designer las extensiones no se crean hasta que son necesarias. Por esa razón, al implementar una extensión, también debe crear una QExtensionFactory, es decir, una clase que sea capaz de crear una instancia de su extensión, y registrarla utilizando el gestor de extensiones de Qt Widgets Designer.

El registro de una fábrica de extensiones se hace típicamente en la función QDesignerCustomWidgetInterface::initialize():

        void MyPlugin::initialize(QDesignerFormEditorInterface *formEditor)
        {
            if (initialized)
                return;

            auto *manager = formEditor->extensionManager();
            Q_ASSERT(manager != nullptr);

            manager->registerExtensions(new MyExtensionFactory(manager),
                                        Q_TYPEID(QDesignerTaskMenuExtension));

            initialized = true;
        }

El QExtensionManager no está pensado para ser instanciado directamente. Puede recuperar una interfaz al gestor de extensiones de Qt Widgets Designer usando la función QDesignerFormEditorInterface::extensionManager(). El parámetro de la función QDesignerCustomWidgetInterface::initialize() proporciona un puntero al objeto QDesignerFormEditorInterface actual de Qt Widgets Designer (formEditor en el ejemplo anterior). Al implementar un plugin de widget personalizado, debe subclasificar el QDesignerCustomWidgetInterface para exponer su plugin a Qt Widgets Designer.

Entonces, cuando se requiera una extensión, el gestor de extensiones de Qt Widgets Designer recorrerá todas sus fábricas registradas llamando a QExtensionFactory::createExtension() para cada una hasta encontrar la primera que sea capaz de crear la extensión solicitada para el objeto seleccionado. Esta fábrica creará una instancia de la extensión.

Hay cuatro tipos de extensiones disponibles en Qt Widgets Designer: QDesignerContainerExtension , QDesignerMemberSheetExtension, QDesignerPropertySheetExtension y QDesignerTaskMenuExtension. Qt Widgets El comportamiento de Designer es el mismo si la extensión solicitada está asociada a un contenedor, una hoja de miembros, una hoja de propiedades o un menú de tareas.

Para un ejemplo completo utilizando la clase QExtensionManager, vea el ejemplo de Extensión de Menú de Tareas. El ejemplo muestra cómo crear un complemento de widget personalizado para Qt Designer, y cómo utilizar la clase QDesignerTaskMenuExtension para añadir elementos personalizados al menú de tareas de Qt Widgets Designer.

Véase también QExtensionFactory y QAbstractExtensionManager.

Documentación de funciones miembro

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

Construye un gestor de extensiones con la dirección parent.

[virtual noexcept] QExtensionManager::~QExtensionManager()

Destruye el gestor de extensiones

[override virtual] QObject *QExtensionManager::extension(QObject *object, const QString &iid) const

Reimplementa: QAbstractExtensionManager::extension(QObject *object, const QString &iid) const.

Devuelve la extensión especificada por iid, para el object dado.

[override virtual] void QExtensionManager::registerExtensions(QAbstractExtensionFactory *factory, const QString &iid = QString())

Reimplementa: QAbstractExtensionManager::registerExtensions(QAbstractExtensionFactory *factory, const QString &iid).

Registra la extensión especificada por factory y el identificador de extensión iid.

[override virtual] void QExtensionManager::unregisterExtensions(QAbstractExtensionFactory *factory, const QString &iid = QString())

Reimplementa: QAbstractExtensionManager::unregisterExtensions(QAbstractExtensionFactory *factory, const QString &iid).

Desregistra la extensión especificada por factory y el identificador de extensión iid.

No miembros relacionados

template <typename T> T qt_extension(QAbstractExtensionManager *manager, QObject *object)

Devuelve la extensión del object dado convertido a tipo T si el objeto es de tipo T (o de una subclase); en caso contrario devuelve 0. La extensión se recupera utilizando la extensión dada manager.

       auto *manager = formEditor->extensionManager();

       auto *propertySheet = qt_extension<QDesignerPropertySheetExtension*>(manager, widget);

       if(propertySheet) {...}

Qt Widgets Cuando se implementa un complemento de widget personalizado, el parámetro de la función QDesignerCustomWidgetInterface::initialize() proporciona un puntero al objeto QDesignerFormEditorInterface actual del diseñador (formEditor).

Si el widget del ejemplo anterior no tiene definido QDesignerPropertySheetExtension, propertySheet será un puntero nulo.

Documentación de macros

Q_DECLARE_EXTENSION_INTERFACE(ExtensionName, Identifier)

Asocia el Identifier dado (un literal de cadena) a la clase de extensión llamada ExtensionName. El Identifier debe ser único. Por ejemplo:

   Q_DECLARE_EXTENSION_INTERFACE(MyExtension, "com.mycompany.myproduct.myextension")

Utilizar los nombres de la empresa y del producto es una buena forma de garantizar la unicidad del identificador.

Al implementar una clase de extensión personalizada, debe utilizar Q_DECLARE_EXTENSION_INTERFACE() para habilitar el uso de la función qt_extension(). La macro se encuentra normalmente justo después de la definición de clase para ExtensionName, en el fichero de cabecera asociado.

Véase también Q_DECLARE_INTERFACE().

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