QDesignerContainerExtension Class
Die Klasse QDesignerContainerExtension ermöglicht das Hinzufügen von Seiten zu einem benutzerdefinierten Multi-Page-Container im Arbeitsbereich von Qt Widgets Designer. Mehr...
Kopfzeile: | #include <QDesignerContainerExtension> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Designer) target_link_libraries(mytarget PRIVATE Qt6::Designer) |
qmake: | QT += designer |
Öffentliche Funktionen
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 |
Detaillierte Beschreibung
QDesignerContainerExtension bietet eine Schnittstelle zur Erstellung eigener Container-Erweiterungen. Eine Container-Erweiterung besteht aus einer Sammlung von Funktionen, die Qt Widgets Designer benötigt, um ein mehrseitiges Container-Plugin zu verwalten, und 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. Ein 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 sie dem Meta-Objektsystem mit dem Q_INTERFACES() Makro bekannt gemacht wird. Dadurch kann Qt Widgets Designer die Funktion qobject_cast() verwenden, um nach unterstützten Schnittstellen zu suchen, wobei nichts weiter als ein Zeiger QObject benötigt wird.
Sie müssen mehrere Funktionen neu implementieren, damit Qt Widgets Designer ein benutzerdefiniertes mehrseitiges Container-Widget verwalten kann: 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 Seiten des Containers 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 er erwartet, dass sie an die Liste der Seiten angehängt wird, während er erwartet, dass die Funktion insertWidget() eine bestimmte Seite zum Container hinzufügt, indem sie an einem bestimmten Index eingefügt wird.
In Qt Widgets Designer werden die Erweiterungen erst erstellt, wenn sie benötigt werden. Aus diesem Grund müssen Sie auch eine QExtensionFactory erstellen, d.h. eine Klasse, die in der Lage ist, eine Instanz Ihrer Erweiterung zu erzeugen, und diese mit Qt Widgets Designer's extension manager registrieren.
Wenn eine Container-Erweiterung benötigt wird, durchläuft Qt Widgets Designer's extension manager alle registrierten Fabriken und ruft QExtensionFactory::createExtension() für jede auf, bis die erste gefunden wird, die in der Lage ist, eine Container-Erweiterung zu erstellen. Diese Fabrik wird dann die Erweiterung für das Plugin erstellen.
Es gibt vier verfügbare Arten von Erweiterungen in Qt Widgets Designer: QDesignerContainerExtension , QDesignerMemberSheetExtension, QDesignerPropertySheetExtension und QDesignerTaskMenuExtension. Qt Widgets Das Verhalten des Designers ist gleich, unabhängig davon, ob die angeforderte Erweiterung mit einem mehrseitigen Container, einem Mitgliederblatt, einem Eigenschaftsblatt oder einem Aufgabenmenü verbunden ist.
Die Klasse QExtensionFactory bietet eine Standard-Erweiterungsfabrik und kann auch als Schnittstelle für benutzerdefinierte Erweiterungsfabriken verwendet werden. Sie können entweder eine neue QExtensionFactory erstellen und die Funktion QExtensionFactory::createExtension() neu implementieren. Zum 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 bestehende Fabrik verwenden und die Funktion QExtensionFactory::createExtension() so erweitern, dass die Fabrik in der Lage ist, auch eine Container-Erweiterung zu erstellen. Ein 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 für die Klasse QDesignerContainerExtension finden Sie im Beispiel Container Extension. Das Beispiel zeigt, wie man ein benutzerdefiniertes mehrseitiges Plugin für Qt Widgets Designer erstellt.
Siehe auch QExtensionFactory, QExtensionManager, und Erstellen von benutzerdefinierten Widget-Erweiterungen.
Dokumentation der Mitgliedsfunktionen
[virtual constexpr noexcept]
QDesignerContainerExtension::~QDesignerContainerExtension()
Zerstört die Erweiterung.
[pure virtual]
void QDesignerContainerExtension::addWidget(QWidget *page)
Fügt die angegebene page zum Container hinzu, indem sie an die Liste der Seiten 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.
Bei Containern, die eine einzige, feste Seite haben, z. B. QScrollArea oder QDockWidget, sollte false zurückgegeben werden.
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.
Bei Containern, die eine einzige, feste Seite haben, z. B. QScrollArea oder QDockWidget, sollte 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 die angegebene page zum Container hinzu, indem sie an der angegebenen 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 Liste der Seiten der Erweiterung.
Siehe auch addWidget() und insertWidget().
[pure virtual]
void QDesignerContainerExtension::setCurrentIndex(int index)
Setzt die aktuell ausgewählte Seite im Container auf die Seite unter der angegebenen Adresse index in der Seitenliste der Erweiterung.
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().
© 2025 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.