QExtensionManager Class
Die Klasse QExtensionManager bietet Möglichkeiten zur Verwaltung von Erweiterungen für Qt Widgets Designer. Mehr...
Kopfzeile: | #include <QExtensionManager> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Designer) target_link_libraries(mytarget PRIVATE Qt6::Designer) |
qmake: | QT += designer |
Erbt: | QObject und QAbstractExtensionManager |
Öffentliche Funktionen
QExtensionManager(QObject *parent = nullptr) | |
virtual | ~QExtensionManager() |
Reimplementierte öffentliche Funktionen
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 |
Verwandte Nicht-Mitglieder
T | qt_extension(QAbstractExtensionManager *manager, QObject *object) |
Makros
Q_DECLARE_EXTENSION_INTERFACE(ExtensionName, Identifier) |
Detaillierte Beschreibung
In Qt Widgets Designer werden die Erweiterungen erst erstellt, wenn sie benötigt werden. Aus diesem Grund müssen Sie, wenn Sie eine Erweiterung implementieren, auch eine QExtensionFactory erstellen, d.h. eine Klasse, die in der Lage ist, eine Instanz Ihrer Erweiterung zu erzeugen, und diese über den Erweiterungsmanager von Qt Widgets Designer registrieren.
Die Registrierung einer Erweiterungsfabrik erfolgt normalerweise in der Funktion 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; }
Der QExtensionManager ist nicht dazu gedacht, direkt instanziiert zu werden. Sie können eine Schnittstelle zum Qt Widgets Designer's Extension Manager mit der QDesignerFormEditorInterface::extensionManager() Funktion abrufen. Ein Zeiger auf Qt Widgets Designer's aktuelles QDesignerFormEditorInterface Objekt (formEditor
im obigen Beispiel) wird durch den Parameter der QDesignerCustomWidgetInterface::initialize() Funktion bereitgestellt. Wenn Sie ein benutzerdefiniertes Widget-Plugin implementieren, müssen Sie die Unterklasse QDesignerCustomWidgetInterface verwenden, um Ihr Plugin dem Qt Widgets Designer zur Verfügung zu stellen.
Wenn dann eine Erweiterung benötigt wird, durchläuft der Erweiterungsmanager von Qt Widgets Designer alle registrierten Fabriken und ruft QExtensionFactory::createExtension() für jede auf, bis die erste gefunden wird, die in der Lage ist, die angeforderte Erweiterung für das ausgewählte Objekt zu erstellen. Diese Fabrik wird dann eine Instanz der Erweiterung erstellen.
Es gibt vier Arten von Erweiterungen in Qt Widgets Designer: QDesignerContainerExtension , QDesignerMemberSheetExtension, QDesignerPropertySheetExtension und QDesignerTaskMenuExtension. Qt Widgets Der Designer verhält sich gleich, unabhängig davon, ob die angeforderte Erweiterung mit einem Container, einem Member Sheet, einem Property Sheet oder einem Aufgabenmenü verbunden ist.
Ein vollständiges Beispiel für die Verwendung der Klasse QExtensionManager finden Sie im Beispiel Taskmenü-Erweiterung. Das Beispiel zeigt, wie Sie ein benutzerdefiniertes Widget-Plugin für Qt Designer erstellen und wie Sie die Klasse QDesignerTaskMenuExtension verwenden, um benutzerdefinierte Elemente zum Aufgabenmenü von Qt Widgets Designer hinzuzufügen.
Siehe auch QExtensionFactory und QAbstractExtensionManager.
Dokumentation der Mitgliedsfunktionen
[explicit]
QExtensionManager::QExtensionManager(QObject *parent = nullptr)
Konstruiert einen Erweiterungsmanager mit der angegebenen parent.
[virtual noexcept]
QExtensionManager::~QExtensionManager()
Zerstört den Erweiterungsmanager
[override virtual]
QObject *QExtensionManager::extension(QObject *object, const QString &iid) const
Reimplements: QAbstractExtensionManager::extension(QObject *object, const QString &iid) const.
Gibt die durch iid angegebene Erweiterung für die angegebene object zurück.
[override virtual]
void QExtensionManager::registerExtensions(QAbstractExtensionFactory *factory, const QString &iid = QString())
Reimplements: QAbstractExtensionManager::registerExtensions(QAbstractExtensionFactory *factory, const QString &iid).
Registriert die Erweiterung, die durch die angegebene factory und den Erweiterungsbezeichner iid angegeben wird.
[override virtual]
void QExtensionManager::unregisterExtensions(QAbstractExtensionFactory *factory, const QString &iid = QString())
Reimplements: QAbstractExtensionManager::unregisterExtensions(QAbstractExtensionFactory *factory, const QString &iid).
Hebt die Registrierung der Erweiterung auf, die durch die angegebene factory und den Erweiterungsbezeichner iid angegeben wird.
Verwandte Nicht-Mitglieder
template <typename T> T qt_extension(QAbstractExtensionManager *manager, QObject *object)
Gibt die Erweiterung des angegebenen object zurück, die auf den Typ T gecastet wurde, wenn das Objekt vom Typ T (oder einer Unterklasse) ist; andernfalls wird 0 zurückgegeben. Die Erweiterung wird mit der angegebenen Erweiterung manager abgerufen.
auto *manager = formEditor->extensionManager(); auto *propertySheet = qt_extension<QDesignerPropertySheetExtension*>(manager, widget); if(propertySheet) {...}
Bei der Implementierung eines benutzerdefinierten Widget-Plugins wird ein Zeiger auf das aktuelle QDesignerFormEditorInterface -Objekt von Qt Widgets Designer (formEditor
) durch den Parameter der Funktion QDesignerCustomWidgetInterface::initialize() bereitgestellt.
Wenn das Widget im obigen Beispiel keine definierte QDesignerPropertySheetExtension hat, wird propertySheet
ein Null-Zeiger sein.
Makro-Dokumentation
Q_DECLARE_EXTENSION_INTERFACE(ExtensionName, Identifier)
Assoziiert die angegebene Identifier (ein Stringliteral) mit der Erweiterungsklasse ExtensionName. Die Identifier muss eindeutig sein. Ein Beispiel:
Q_DECLARE_EXTENSION_INTERFACE(MyExtension, "com.mycompany.myproduct.myextension")
Die Verwendung des Firmen- und Produktnamens ist ein guter Weg, um die Eindeutigkeit des Bezeichners zu gewährleisten.
Wenn Sie eine benutzerdefinierte Erweiterungsklasse implementieren, müssen Sie Q_DECLARE_EXTENSION_INTERFACE() verwenden, um die Verwendung der Funktion qt_extension() zu ermöglichen. Das Makro befindet sich normalerweise direkt nach der Klassendefinition für ExtensionName in der zugehörigen Header-Datei.
Siehe auch Q_DECLARE_INTERFACE().
© 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.