QDesignerCustomWidgetInterface Class
Die Klasse QDesignerCustomWidgetInterface ermöglicht Qt Widgets Designer den Zugriff auf und die Erstellung von benutzerdefinierten Widgets. Mehr...
Kopfzeile: | #include <QDesignerCustomWidgetInterface> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Designer) target_link_libraries(mytarget PRIVATE Qt6::Designer) |
qmake: | QT += designer |
Öffentliche Funktionen
virtual | ~QDesignerCustomWidgetInterface() |
virtual QString | codeTemplate() const |
virtual QWidget * | createWidget(QWidget *parent) = 0 |
virtual QString | domXml() const |
virtual QString | group() const = 0 |
virtual QIcon | icon() const = 0 |
virtual QString | includeFile() const = 0 |
virtual void | initialize(QDesignerFormEditorInterface *formEditor) |
virtual bool | isContainer() const = 0 |
virtual bool | isInitialized() const |
virtual QString | name() const = 0 |
virtual QString | toolTip() const = 0 |
virtual QString | whatsThis() const = 0 |
Makros
Detaillierte Beschreibung
QDesignerCustomWidgetInterface bietet ein benutzerdefiniertes Widget mit einer Schnittstelle. Die Klasse enthält eine Reihe von Funktionen, die subclassed werden müssen, um grundlegende Informationen über das Widget zurückzugeben, wie z.B. den Klassennamen und den Namen der Header-Datei. Weitere Funktionen müssen implementiert werden, um das Plugin zu initialisieren, wenn es geladen wird, und um Instanzen des benutzerdefinierten Widgets zu erstellen, die Qt Widgets Designer verwenden kann.
Wenn Sie ein benutzerdefiniertes Widget implementieren, müssen Sie die Unterklasse QDesignerCustomWidgetInterface verwenden, um Ihr Widget dem Qt Widgets Designer zur Verfügung zu stellen. Dies ist zum Beispiel die Deklaration für das Plugin, das im Beispiel des benutzerdefinierten Widget-Plugins verwendet wird und die Verwendung eines benutzerdefinierten Analoguhr-Widgets durch Qt Widgets Designer ermöglicht:
class AnalogClockPlugin : public QObject, public QDesignerCustomWidgetInterface { Q_OBJECT Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QDesignerCustomWidgetInterface") Q_INTERFACES(QDesignerCustomWidgetInterface) public: explicit AnalogClockPlugin(QObject *parent = nullptr); bool isContainer() const override; bool isInitialized() const override; QIcon icon() const override; QString domXml() const override; QString group() const override; QString includeFile() const override; QString name() const override; QString toolTip() const override; QString whatsThis() const override; QWidget *createWidget(QWidget *parent) override; void initialize(QDesignerFormEditorInterface *core) override; private: bool initialized = false; };
Beachten Sie, dass der einzige Teil der Klassendefinition, der für dieses spezielle benutzerdefinierte Widget spezifisch ist, der Klassenname ist. Da wir eine Schnittstelle implementieren, müssen wir außerdem sicherstellen, dass sie dem Meta-Objektsystem mit dem Makro Q_INTERFACES() bekannt gemacht wird. Dies ermöglicht es Qt Widgets Designer, die Funktion qobject_cast() zu verwenden, um nach unterstützten Schnittstellen zu suchen, wobei nichts weiter als ein QObject -Zeiger benötigt wird.
Nachdem Qt Widgets Designer ein benutzerdefiniertes Widget-Plugin geladen hat, ruft er die Funktion initialize() der Schnittstelle auf, um ihr zu ermöglichen, alle Ressourcen einzurichten, die sie benötigen könnte. Diese Funktion wird mit einem QDesignerFormEditorInterface -Parameter aufgerufen, der dem Plugin einen Zugang zur gesamten API von Qt Widgets Designer bietet.
Qt Widgets Designer konstruiert Instanzen des benutzerdefinierten Widgets, indem er die Funktion createWidget() des Plugins mit einem geeigneten übergeordneten Widget aufruft. Plugins müssen eine Instanz eines benutzerdefinierten Widgets mit dem angegebenen übergeordneten Widget konstruieren und zurückgeben.
Exportieren Sie Ihr benutzerdefiniertes Widget-Plugin in Qt Widgets Designer, indem Sie das Makro Q_PLUGIN_METADATA() verwenden. Wenn zum Beispiel eine Bibliothek mit dem Namen libcustomwidgetplugin.so
(unter Unix) oder libcustomwidget.dll
(unter Windows) eine Widget-Klasse mit dem Namen MyCustomWidget
enthält, können wir sie exportieren, indem wir die folgende Zeile in die Datei einfügen, die den Plugin-Header enthält:
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QDesignerCustomWidgetInterface")
Dieses Makro stellt sicher, dass Qt Widgets Designer auf das benutzerdefinierte Widget zugreifen und es konstruieren kann. Ohne dieses Makro gibt es keine Möglichkeit für Qt Widgets Designer, es zu verwenden.
Wenn Sie ein benutzerdefiniertes Widget-Plugin implementieren, erstellen Sie es als separate Bibliothek. Wenn Sie mehrere benutzerdefinierte Widget-Plugins in dieselbe Bibliothek aufnehmen möchten, müssen Sie zusätzlich die Unterklasse QDesignerCustomWidgetCollectionInterface verwenden.
Achtung! Wenn Ihr benutzerdefiniertes Widget-Plugin QVariant Eigenschaften enthält, beachten Sie, dass nur die folgenden types unterstützt werden:
- QVariant::ByteArray
- QVariant::Bool
- QVariant::Farbe
- QVariant::Cursor
- QVariant::Datum
- QVariant::DateTime
- QVariant::Double
- QVariant::Int
- QVariant::Punkt
- QVariant::Rect
- QVariant::Größe
- QVariant::SizePolicy
- QVariant::String
- QVariant::Zeit
- QVariant::UInt
Ein vollständiges Beispiel für die Verwendung der Klasse QDesignerCustomWidgetInterface finden Sie unter Custom Widget Example. Das Beispiel zeigt, wie man ein benutzerdefiniertes Widget-Plugin für Qt Widgets Designer erstellt.
Siehe auch QDesignerCustomWidgetCollectionInterface und Erstellen von benutzerdefinierten Widgets für Qt Widgets Designer.
Dokumentation der Mitgliedsfunktionen
[virtual constexpr noexcept]
QDesignerCustomWidgetInterface::~QDesignerCustomWidgetInterface()
Zerstört die benutzerdefinierte Widget-Schnittstelle.
[virtual]
QString QDesignerCustomWidgetInterface::codeTemplate() const
Diese Funktion ist für die zukünftige Verwendung durch Qt Widgets Designer reserviert.
[pure virtual]
QWidget *QDesignerCustomWidgetInterface::createWidget(QWidget *parent)
Gibt eine neue Instanz des benutzerdefinierten Widgets mit dem angegebenen parent zurück.
[virtual]
QString QDesignerCustomWidgetInterface::domXml() const
Gibt das XML zurück, das zur Beschreibung der Eigenschaften des benutzerdefinierten Widgets an Qt Widgets Designer verwendet wird.
[pure virtual]
QString QDesignerCustomWidgetInterface::group() const
Gibt den Namen der Gruppe zurück, zu der das benutzerdefinierte Widget gehört.
[pure virtual]
QIcon QDesignerCustomWidgetInterface::icon() const
Gibt das Symbol zurück, das zur Darstellung des benutzerdefinierten Widgets im Widgetfeld von Qt Widgets Designer verwendet wird.
[pure virtual]
QString QDesignerCustomWidgetInterface::includeFile() const
Gibt den Pfad zu der Include-Datei zurück, die uic bei der Erstellung des Codes für das benutzerdefinierte Widget verwendet.
[virtual]
void QDesignerCustomWidgetInterface::initialize(QDesignerFormEditorInterface *formEditor)
Initialisiert das Widget für die Verwendung mit der angegebenen Schnittstelle formEditor.
Siehe auch isInitialized().
[pure virtual]
bool QDesignerCustomWidgetInterface::isContainer() const
Gibt true zurück, wenn das benutzerdefinierte Widget als Container verwendet werden soll; andernfalls wird false zurückgegeben.
Die meisten benutzerdefinierten Widgets werden nicht verwendet, um andere Widgets zu enthalten, so dass ihre Implementierungen dieser Funktion false zurückgeben, aber benutzerdefinierte Container geben true zurück, um sicherzustellen, dass sie sich in Qt Widgets Designer korrekt verhalten.
[virtual]
bool QDesignerCustomWidgetInterface::isInitialized() const
Gibt true zurück, wenn das Widget initialisiert wurde; andernfalls wird false zurückgegeben.
Siehe auch initialize().
[pure virtual]
QString QDesignerCustomWidgetInterface::name() const
Gibt den Klassennamen des benutzerdefinierten Widgets zurück, das von der Schnittstelle bereitgestellt wird.
Der zurückgegebene Name muss mit dem für das benutzerdefinierte Widget verwendeten Klassennamen identisch sein.
[pure virtual]
QString QDesignerCustomWidgetInterface::toolTip() const
Gibt eine kurze Beschreibung des Widgets zurück, die von Qt Widgets Designer in einem Tooltip verwendet werden kann.
[pure virtual]
QString QDesignerCustomWidgetInterface::whatsThis() const
Gibt eine Beschreibung des Widgets zurück, die von Qt Widgets Designer in der "What's This?"-Hilfe für das Widget verwendet werden kann.
Makro-Dokumentation
QDESIGNER_WIDGET_EXPORT
Dieses Makro wird bei der Definition von benutzerdefinierten Widgets verwendet, um sicherzustellen, dass sie korrekt aus Plugins für die Verwendung mit Qt Widgets Designer exportiert werden.
Auf einigen Plattformen werden die Symbole, die von Qt Widgets Designer benötigt werden, um neue Widgets zu erstellen, vom Build-System aus den Plugins entfernt, so dass sie unbrauchbar werden. Die Verwendung dieses Makros stellt sicher, dass die Symbole auf diesen Plattformen beibehalten werden und hat keine Nebeneffekte auf anderen Plattformen.
Das Beispiel für das benutzerdefinierte Widget-Plugin exportiert zum Beispiel eine benutzerdefinierte Widget-Klasse mit der folgenden Deklaration:
class QDESIGNER_WIDGET_EXPORT AnalogClock : public QWidget { Q_OBJECT ... };
Siehe auch Erstellen von benutzerdefinierten Widgets für Qt Widgets Designer.
© 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.