En esta página

QDesignerContainerExtension Class

La clase QDesignerContainerExtension permite añadir páginas a un contenedor multipágina personalizado en el espacio de trabajo de Qt Widgets Designer. Más...

Cabecera: #include <QDesignerContainerExtension>
CMake: find_package(Qt6 REQUIRED COMPONENTS Designer)
target_link_libraries(mytarget PRIVATE Qt6::Designer)
qmake: QT += designer

Funciones públicas

virtual ~QDesignerContainerExtension()
virtual void addWidget(QWidget *page) = 0
virtual bool canAddWidget() const = 0
virtual bool canRemove(int index) const = 0
virtual int count() const = 0
virtual int currentIndex() const = 0
virtual void insertWidget(int index, QWidget *page) = 0
virtual void remove(int index) = 0
virtual void setCurrentIndex(int index) = 0
virtual QWidget *widget(int index) const = 0

Descripción Detallada

Captura de pantalla del editor de IU <span translate=Qt Widgets Designer mostrando la opción de insertar la página anterior a la actual en un objeto" src="images/containerextension-example.webp" title="Captura de pantalla del editor de IU Qt Widgets Designer mostrando la opción de insertar la página anterior a la actual en un objeto"/>

QDesignerContainerExtension proporciona una interfaz para crear extensiones de contenedor personalizadas. Una extensión de contenedor consiste en una colección de funciones que Qt Widgets Designer necesita para gestionar un plugin contenedor multipágina, y una lista de las páginas del contenedor.

Advertencia: Esta no es una extensión para plugins de contenedores en general, sólo para contenedores multipágina personalizados.

Para crear una extensión de contenedor, su clase de extensión debe heredar tanto de QObject como de QDesignerContainerExtension. Por ejemplo:

class MyContainerExtension : public QObject,
       public QDesignerContainerExtension
{
    Q_OBJECT
    Q_INTERFACES(QDesignerContainerExtension)

public:
    MyContainerExtension(MyCustomWidget *widget,
                         QObject *parent = 0);
    int count() const;
    QWidget *widget(int index) const;
    int currentIndex() const;
    void setCurrentIndex(int index);
    void addWidget(QWidget *widget);
    void insertWidget(int index, QWidget *widget);
    void remove(int index);

private:
    MyCustomWidget *myWidget;
};

Dado que estamos implementando una interfaz, debemos asegurarnos de que se da a conocer al sistema de metaobjetos mediante la macro Q_INTERFACES(). Esto permite a Qt Widgets Designer utilizar la función qobject_cast() para buscar interfaces compatibles utilizando únicamente un puntero QObject.

Debes reimplementar varias funciones para permitir a Qt Widgets Designer gestionar un widget contenedor multipágina personalizado: Qt Widgets Designer utiliza count() para realizar un seguimiento del número de páginas del contenedor, widget() para devolver la página en un índice determinado de la lista de páginas del contenedor y currentIndex() para devolver el índice de la lista de la página seleccionada. Qt Widgets Designer utiliza la función addWidget() para añadir una página determinada al contenedor, esperando que se añada a la lista de páginas, mientras que espera que la función insertWidget() añada una página determinada al contenedor insertándola en un índice determinado.

En Qt Widgets Designer las extensiones no se crean hasta que son necesarias. Por esa razón debes crear también una QExtensionFactory, es decir, una clase que sea capaz de crear una instancia de tu extensión, y registrarla usando la extension manager de Qt Widgets Designer.

Cuando se necesite una extensión contenedora, Qt Widgets Designer's extension manager recorrerá todas las fábricas registradas llamando a QExtensionFactory::createExtension() en cada una de ellas hasta encontrar la primera que sea capaz de crear una extensión contenedora. Esta fábrica creará entonces la extensión para el plugin.

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

La clase QExtensionFactory proporciona una fábrica de extensiones estándar y también puede utilizarse como interfaz para fábricas de extensiones personalizadas. Puede crear un nuevo QExtensionFactory y reimplementar la función QExtensionFactory::createExtension(). por ejemplo:

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 puede utilizar una fábrica existente, ampliando la función QExtensionFactory::createExtension() para que la fábrica sea capaz de crear también una extensión contenedora. Por ejemplo:

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;
    }
}

Para un ejemplo completo usando la clase QDesignerContainerExtension, ver el ejemplo de Extensión de Contenedor. El ejemplo muestra cómo crear un plugin multipágina personalizado para Qt Widgets Designer.

Consulte también QExtensionFactory, QExtensionManager y Creación de extensiones de widget personalizadas.

Documentación de funciones miembro

[virtual constexpr noexcept] QDesignerContainerExtension::~QDesignerContainerExtension()

Destruye la extensión.

[pure virtual] void QDesignerContainerExtension::addWidget(QWidget *page)

Añade la dirección page al contenedor añadiéndola a la lista de páginas de la extensión.

Véase también insertWidget(), remove() y widget().

[pure virtual] bool QDesignerContainerExtension::canAddWidget() const

Devuelve si se puede añadir un widget. Determina si las opciones del menú contextual para añadir o insertar páginas están habilitadas.

Esto debería devolver false para los contenedores que tienen una única página fija, por ejemplo QScrollArea o QDockWidget.

Véase también addWidget() y canRemove().

[pure virtual] bool QDesignerContainerExtension::canRemove(int index) const

Devuelve si se puede eliminar el widget en la dirección index dada. Esto determina si la opción del menú contextual para eliminar la página actual está habilitada.

Esto debería devolver false para los contenedores que tienen una única página fija, por ejemplo QScrollArea o QDockWidget.

Véase también remove() y canAddWidget().

[pure virtual] int QDesignerContainerExtension::count() const

Devuelve el número de páginas del contenedor.

[pure virtual] int QDesignerContainerExtension::currentIndex() const

Devuelve el índice de la página seleccionada actualmente en el contenedor.

Véase también setCurrentIndex().

[pure virtual] void QDesignerContainerExtension::insertWidget(int index, QWidget *page)

Añade el page dado al contenedor insertándolo en el index dado en la lista de páginas de la extensión.

Véase también addWidget(), remove() y widget().

[pure virtual] void QDesignerContainerExtension::remove(int index)

Elimina la página index de la lista de páginas de la extensión.

Véase también addWidget() y insertWidget().

[pure virtual] void QDesignerContainerExtension::setCurrentIndex(int index)

Establece que la página seleccionada actualmente en el contenedor sea la página en el index dado en la lista de páginas de la extensión.

Véase también currentIndex().

[pure virtual] QWidget *QDesignerContainerExtension::widget(int index) const

Devuelve la página en el index dado en la lista de páginas de la extensión.

Véase también addWidget() y insertWidget().

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