QDesignerCustomWidgetInterface Class
Die Klasse „QDesignerCustomWidgetInterface“ ermöglicht es dem „ Qt Widgets -Designer“, auf benutzerdefinierte Widgets zuzugreifen und diese zu erstellen. Mehr...
| Überschrift: | #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
Ausführliche Beschreibung
QDesignerCustomWidgetInterface stellt eine Schnittstelle für ein benutzerdefiniertes Widget bereit. Die Klasse enthält eine Reihe von Funktionen, die in Unterklassen implementiert werden müssen, um grundlegende Informationen über das Widget zurückzugeben, wie beispielsweise den Klassennamen und den Namen der Header-Datei. Weitere Funktionen müssen implementiert werden, um das Plugin beim Laden zu initialisieren und Instanzen des benutzerdefinierten Widgets für den „ Qt Widgets -Designer“ zu erstellen.
Bei der Implementierung eines benutzerdefinierten Widgets müssen Sie eine Unterklasse von `QDesignerCustomWidgetInterface` erstellen, um Ihr Widget für den „ Qt Widgets “-Designer verfügbar zu machen. Dies ist beispielsweise die Deklaration für das im Beispiel „Custom Widget Plugin“ verwendete Plugin, das die Verwendung eines benutzerdefinierten Analoguhr-Widgets im „ 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 Klassenname der einzige Teil der Klassendefinition ist, der für dieses spezielle benutzerdefinierte Widget spezifisch ist. Da wir zudem eine Schnittstelle implementieren, müssen wir sicherstellen, dass diese dem Metaobjektsystem mithilfe des Makros ` Q_INTERFACES()` bekannt gemacht wird. Dadurch kann der „ Qt Widgets Designer“ die Funktion ` qobject_cast()` nutzen, um allein anhand eines ` QObject `-Zeigers nach unterstützten Schnittstellen abzufragen.
Nachdem der „ Qt Widgets “ Designer ein benutzerdefiniertes Widget-Plugin geladen hat, ruft er die Funktion „ initialize()“ der Schnittstelle auf, damit diese alle benötigten Ressourcen einrichten kann. Diese Funktion wird mit einem „ QDesignerFormEditorInterface “-Parameter aufgerufen, der dem Plugin einen Zugang zur gesamten API des „ Qt Widgets “ Designers bietet.
Qt Widgets Designer erstellt 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 erstellen und zurückgeben.
Exportieren Sie Ihr benutzerdefiniertes Widget-Plugin mithilfe des Makros „ Q_PLUGIN_METADATA()“ in den „ Qt Widgets Designer“. Wenn beispielsweise eine Bibliothek namens „ libcustomwidgetplugin.so “ (unter Unix) oder „ libcustomwidget.dll “ (unter Windows) eine Widget-Klasse namens „ MyCustomWidget “ enthält, können wir diese exportieren, indem wir die folgende Zeile in die Datei mit dem Plugin-Header einfügen:
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QDesignerCustomWidgetInterface")Dieses Makro stellt sicher, dass der „ Qt Widgets “-Designer auf das benutzerdefinierte Widget zugreifen und es erstellen kann. Ohne dieses Makro kann der „ Qt Widgets “-Designer das Widget nicht verwenden.
Bei der Implementierung eines benutzerdefinierten Widget-Plugins erstellen Sie dieses als separate Bibliothek. Wenn Sie mehrere benutzerdefinierte Widget-Plugins in derselben Bibliothek zusammenfassen möchten, müssen Sie zusätzlich eine Unterklasse von ` QDesignerCustomWidgetCollectionInterface` definieren.
Warnung: Wenn Ihr benutzerdefiniertes Widget-Plugin Eigenschaften von ` QVariant ` enthält, beachten Sie bitte, dass nur die folgenden ` types ` unterstützt werden:
- QVariant::ByteArray
- QVariant::Bool
- QVariant::Color
- QVariant::Cursor
- QVariant::Date
- QVariant::DateTime
- QVariant::Double
- QVariant::Int
- QVariant::Point
- QVariant::Rect
- QVariant::Size
- QVariant::SizePolicy
- QVariant::String
- QVariant::Time
- QVariant::UInt
Ein vollständiges Beispiel für die Verwendung der Klasse `QDesignerCustomWidgetInterface` finden Sie im Beispiel „Benutzerdefiniertes Widget“. Das Beispiel zeigt, wie Sie ein benutzerdefiniertes Widget-Plugin für den „ Qt Widgets -Designer“ erstellen.
Siehe auch „ QDesignerCustomWidgetCollectionInterface “ und „Erstellen benutzerdefinierter Widgets für den Qt Widgets -Designer“.
Dokumentation zu den Mitgliedsfunktionen
[virtual constexpr noexcept default] QDesignerCustomWidgetInterface::~QDesignerCustomWidgetInterface()
Löst die benutzerdefinierte Widget-Oberfläche auf.
[virtual] QString QDesignerCustomWidgetInterface::codeTemplate() const
Diese Funktion ist für eine zukünftige Verwendung durch den „ Qt Widgets Designer“ reserviert.
[pure virtual] QWidget *QDesignerCustomWidgetInterface::createWidget(QWidget *parent)
Gibt eine neue Instanz des benutzerdefinierten Widgets zurück, mit dem angegebenen ` parent`.
[virtual] QString QDesignerCustomWidgetInterface::domXml() const
Gibt das XML zurück, mit dem die Eigenschaften des benutzerdefinierten Widgets für den „ Qt Widgets “-Designer beschrieben werden.
[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, mit dem das benutzerdefinierte Widget in der Widget-Leiste des „ Qt Widgets “-Designers dargestellt wird.
[pure virtual] QString QDesignerCustomWidgetInterface::includeFile() const
Gibt den Pfad zur Include-Datei zurück, die uic beim Erstellen des Codes für das benutzerdefinierte Widget verwendet.
Bei benutzerdefinierten Widgets, die in C++ verwendet werden, Qt for Pythonverwenden Sie Präfixe, um sprachspezifische Informationen in der zurückgegebenen Zeichenkette wie unten gezeigt anzugeben:
"C++:myheader.h,Python:MyModule"[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 dienen nicht dazu, andere Widgets zu enthalten, sodass ihre Implementierungen dieser Funktion „false“ zurückgeben; benutzerdefinierte Container geben jedoch „true“ zurück, um sicherzustellen, dass sie sich im „ Qt Widgets -Designer“ korrekt verhalten.
[virtual] bool QDesignerCustomWidgetInterface::isInitialized() const
Gibt „true“ zurück, wenn das Widget initialisiert wurde; andernfalls gibt es „false“ zurück.
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 Klassennamen übereinstimmen, der für das benutzerdefinierte Widget verwendet wird.
[pure virtual] QString QDesignerCustomWidgetInterface::toolTip() const
Gibt eine Kurzbeschreibung des Widgets zurück, die vom „ Qt Widgets -Designer“ in einem Tooltip verwendet werden kann.
[pure virtual] QString QDesignerCustomWidgetInterface::whatsThis() const
Gibt eine Beschreibung des Widgets zurück, die vom „ Qt Widgets -Designer“ in der Hilfe „Was ist das?“ für das Widget verwendet werden kann.
Makro-Dokumentation
QDESIGNER_WIDGET_EXPORT
Dieses Makro wird bei der Definition benutzerdefinierter Widgets verwendet, um sicherzustellen, dass diese aus Plugins korrekt exportiert werden, damit sie mit dem „ Qt Widgets Designer“ verwendet werden können.
Auf einigen Plattformen werden die von „ Qt Widgets Designer“ zum Erstellen neuer Widgets benötigten Symbole durch das Build-System aus den Plugins entfernt, wodurch diese unbrauchbar werden. Die Verwendung dieses Makros stellt sicher, dass die Symbole auf diesen Plattformen erhalten bleiben, und hat auf anderen Plattformen keine Nebenwirkungen.
Beispielsweise exportiert das Beispiel „Custom Widget Plugin “ eine benutzerdefinierte Widget-Klasse mit der folgenden Deklaration:
class QDESIGNER_WIDGET_EXPORT AnalogClock : public QWidget
{
Q_OBJECT
...
};Siehe auch „Erstellen benutzerdefinierter Widgets für den „ Qt Widgets “-Designer“.
© 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.