Auf dieser Seite

QDesignerContainerExtension Class

Mit der Klasse „QDesignerContainerExtension“ können Sie Seiten zu einem benutzerdefinierten mehrseitigen Container im Arbeitsbereich des „ Qt Widgets “-Designers hinzufügen. Mehr...

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

Öffentliche Funktionen

QDesignerContainerExtension()
QDesignerContainerExtension(const QDesignerContainerExtension &)
QDesignerContainerExtension(QDesignerContainerExtension &&)
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
QDesignerContainerExtension &operator=(QDesignerContainerExtension &&)
QDesignerContainerExtension &operator=(const QDesignerContainerExtension &)

Ausführliche Beschreibung

Screenshot des <span translate=Qt Widgets Designer-UI-Editors, der die Option zum Einfügen einer Seite vor der aktuellen Seite in ein Objekt zeigt" src="images/containerextension-example.webp" title="Screenshot des Qt Widgets Designer-UI-Editors, der die Option zum Einfügen einer Seite vor der aktuellen Seite in ein Objekt zeigt"/>

Qt Widgets ContainerExtension bietet eine Schnittstelle zum Erstellen benutzerdefinierter Container-Erweiterungen. Eine Container-Erweiterung besteht aus einer Sammlung von Funktionen, die Designer zur Verwaltung eines mehrseitigen Container-Plugins benötigt, sowie aus einer Liste der Seiten des Containers.

Warnung: Dies ist keine Erweiterung für Container-Plugins im Allgemeinen, sondern nur für benutzerdefinierte mehrseitige Container.

Um eine Container-Erweiterung zu erstellen, muss Ihre Erweiterungsklasse sowohl von ` QObject ` als auch von `QDesignerContainerExtension` erben. Zum Beispiel:

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

Da wir eine Schnittstelle implementieren, müssen wir sicherstellen, dass diese dem Metaobjektsystem mithilfe des Makros ` Q_INTERFACES()` bekannt gemacht wird. Dies ermöglicht es dem „ Qt Widgets “-Designer, die Funktion ` qobject_cast()` zu verwenden, um mithilfe eines reinen ` QObject `-Zeigers nach unterstützten Schnittstellen abzufragen.

Sie müssen mehrere Funktionen neu implementieren, damit der „ Qt Widgets Designer“ ein benutzerdefiniertes mehrseitiges Container-Widget verwalten kann: Der „ Qt Widgets Designer“ verwendet „ count()“, um die Anzahl der Seiten in Ihrem Container zu verfolgen, „ widget()“, um die Seite an einem bestimmten Index in der Liste der Containerseiten zurückzugeben, und „ currentIndex()“, um den Listenindex der ausgewählten Seite zurückzugeben. „ Qt Widgets “ Der Designer verwendet die Funktion „ addWidget()“, um eine bestimmte Seite zum Container hinzuzufügen, wobei erwartet wird, dass diese an das Ende der Seitenliste angehängt wird, während die Funktion „ insertWidget()“ eine bestimmte Seite durch Einfügen an einem bestimmten Index in den Container einfügt.

Im „ Qt Widgets “-Designer werden die Erweiterungen erst dann erstellt, wenn sie benötigt werden. Aus diesem Grund müssen Sie auch eine ` QExtensionFactory` erstellen, d. h. eine Klasse, die eine Instanz Ihrer Erweiterung erstellen kann, und diese mithilfe des ` Qt Widgets `-Designers unter ` extension manager` registrieren.

Wenn eine Container-Erweiterung benötigt wird, durchläuft die „ extension manager “ des „ Qt Widgets “-Designers alle registrierten Fabriken und ruft für jede davon „ QExtensionFactory::createExtension()“ auf, bis die erste gefunden wird, die eine Container-Erweiterung erstellen kann. Diese Fabrik erstellt dann die Erweiterung für das Plugin.

Im „ Qt Widgets Designer“ stehen vier Arten von Erweiterungen zur Verfügung: „QDesignerContainerExtension“, „ QDesignerMemberSheetExtension “, „ QDesignerPropertySheetExtension “ und „ QDesignerTaskMenuExtension “. Das Verhalten des „ Qt Widgets Designers“ ist unabhängig davon, ob die angeforderte Erweiterung mit einem mehrseitigen Container, einem Elementblatt, einem Eigenschaftsblatt oder einem Aufgabenmenü verknüpft ist.

Die Klasse „ QExtensionFactory “ stellt eine Standard-Erweiterungsfabrik bereit und kann auch als Schnittstelle für benutzerdefinierte Erweiterungsfabriken verwendet werden. Sie können entweder eine neue „ QExtensionFactory “-Instanz erstellen und die Funktion „ QExtensionFactory::createExtension()“ neu implementieren. Beispiel:

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

Oder Sie können eine vorhandene Factory verwenden und die Funktion ` QExtensionFactory::createExtension()` erweitern, damit die Factory auch eine Container-Erweiterung erstellen kann. Beispiel:

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

Ein vollständiges Beispiel zur Verwendung der Klasse `QDesignerContainerExtension` finden Sie im Beispiel „Container-Erweiterung“. Das Beispiel zeigt, wie Sie ein benutzerdefiniertes mehrseitiges Plugin für den ` Qt Widgets Designer` erstellen.

Siehe auch „ QExtensionFactory“ , „ QExtensionManager “ und „Erstellen benutzerdefinierter Widget-Erweiterungen“.

Dokumentation zu Mitgliedsfunktionen

[constexpr noexcept default] QDesignerContainerExtension::QDesignerContainerExtension()

Erstellt standardmäßig eine Instanz von ` QDesignerContainerExtension`.

[delete] QDesignerContainerExtension::QDesignerContainerExtension(const QDesignerContainerExtension &)

Erstellt eine Instanz von „ QDesignerContainerExtension “ durch Kopieren. Diese Funktion wurde gelöscht.

[delete] QDesignerContainerExtension::QDesignerContainerExtension(QDesignerContainerExtension &&)

Erstellt eine Instanz von ` QDesignerContainerExtension`. Diese Funktion wurde gelöscht.

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

Löscht die Erweiterung.

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

Fügt die angegebene URL page dem Container hinzu, indem sie an das Seitenverzeichnis der Erweiterung angehängt wird.

Siehe auch insertWidget(), remove() und widget().

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

Gibt zurück, ob ein Widget hinzugefügt werden kann. Dies bestimmt, ob die Kontextmenüoptionen zum Hinzufügen oder Einfügen von Seiten aktiviert sind.

Für Container mit einer einzigen, festen Seite sollte hier „false“ zurückgegeben werden, zum Beispiel QScrollArea oder QDockWidget.

Siehe auch addWidget() und canRemove().

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

Gibt zurück, ob das Widget unter der angegebenen Adresse index entfernt werden kann. Dies bestimmt, ob die Kontextmenüoption zum Entfernen der aktuellen Seite aktiviert ist.

Für Container mit einer einzigen, festen Seite, zum Beispiel QScrollArea oder QDockWidget, sollte hier „false“ zurückgegeben werden.

Siehe auch remove() und canAddWidget().

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

Gibt die Anzahl der Seiten im Container zurück.

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

Gibt den Index der aktuell ausgewählten Seite im Container zurück.

Siehe auch „ setCurrentIndex()“.

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

Fügt den angegebenen page zum Container hinzu, indem er an der angegebenen Position index in die Seitenliste der Erweiterung eingefügt wird.

Siehe auch addWidget(), remove() und widget().

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

Entfernt die Seite unter der angegebenen Adresse index aus der Seitenliste der Erweiterung.

Siehe auch addWidget() und insertWidget().

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

Legt fest, dass die aktuell im Container ausgewählte Seite die Seite unter der angegebenen Adresse index in der Seitenliste der Erweiterung ist.

Siehe auch currentIndex().

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

Gibt die Seite unter der angegebenen Adresse index in der Seitenliste der Erweiterung zurück.

Siehe auch addWidget() und insertWidget().

[delete] QDesignerContainerExtension &QDesignerContainerExtension::operator=(QDesignerContainerExtension &&)

Weist „ other “ dieser „ QDesignerContainerExtension “-Instanz zu. Diese Funktion wird gelöscht.

[delete] QDesignerContainerExtension &QDesignerContainerExtension::operator=(const QDesignerContainerExtension &)

Weist dieser „ QDesignerContainerExtension “-Instanz den Wert „ other “ zu. Diese Funktion wird gelöscht.

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