QDesignerPropertySheetExtension Class
Die Klasse QDesignerPropertySheetExtension ermöglicht es, die Eigenschaften eines Widgets zu manipulieren, das im Eigenschaftseditor von Qt Designer angezeigt wird. Mehr...
Kopfzeile: | #include <QDesignerPropertySheetExtension> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Designer) target_link_libraries(mytarget PRIVATE Qt6::Designer) |
qmake: | QT += designer |
Öffentliche Funktionen
virtual | ~QDesignerPropertySheetExtension() |
virtual int | count() const = 0 |
virtual bool | hasReset(int index) const = 0 |
virtual int | indexOf(const QString &name) const = 0 |
virtual bool | isAttribute(int index) const = 0 |
virtual bool | isChanged(int index) const = 0 |
virtual bool | isEnabled(int index) const = 0 |
virtual bool | isVisible(int index) const = 0 |
virtual QVariant | property(int index) const = 0 |
virtual QString | propertyGroup(int index) const = 0 |
virtual QString | propertyName(int index) const = 0 |
virtual bool | reset(int index) = 0 |
virtual void | setAttribute(int index, bool attribute) = 0 |
virtual void | setChanged(int index, bool changed) = 0 |
virtual void | setProperty(int index, const QVariant &value) = 0 |
virtual void | setPropertyGroup(int index, const QString &group) = 0 |
virtual void | setVisible(int index, bool visible) = 0 |
Detaillierte Beschreibung
QDesignerPropertySheetExtension stellt eine Sammlung von Funktionen zur Verfügung, die typischerweise verwendet werden, um die Eigenschaften eines Widgets abzufragen und das Aussehen der Eigenschaften im Eigenschaftseditor zu verändern. Zum Beispiel:
QDesignerPropertySheetExtension *propertySheet = nullptr; QExtensionManager manager = formEditor->extensionManager(); propertySheet = qt_extension<QDesignerPropertySheetExtension*>(manager, widget); int index = propertySheet->indexOf(u"margin"_s); propertySheet->setProperty(index, 10); propertySheet->setChanged(index, true); delete propertySheet;
Beachten Sie, dass, wenn Sie den Wert einer Eigenschaft mit der Funktion QDesignerPropertySheetExtension::setProperty() ändern, der Rückgängig-Stapel nicht aktualisiert wird. Um sicherzustellen, dass der Wert einer Eigenschaft mit Hilfe des Rückgängig-Stapels rückgängig gemacht werden kann, müssen Sie stattdessen die Funktion QDesignerFormWindowCursorInterface::setProperty() oder ihren Verwandten setWidgetProperty() verwenden.
Bei der Implementierung eines benutzerdefinierten Widget-Plugins wird ein Zeiger auf das aktuelle QDesignerFormEditorInterface -Objekt von Qt Widgets Designer (formEditor
im obigen Beispiel) durch den Parameter der Funktion QDesignerCustomWidgetInterface::initialize() bereitgestellt.
Das Eigenschaftsblatt oder jede andere Erweiterung kann durch Abfragen des Qt Widgets Designer Erweiterungsmanagers mit der Funktion qt_extension() abgerufen werden. Wenn Sie die Erweiterung freigeben wollen, müssen Sie nur den Zeiger löschen.
Alle Widgets haben ein Standardeigenschaftsblatt, das den Eigenschaftseditor von Qt Widgets Designer mit den Eigenschaften des Widgets füllt (d.h. mit denen, die mit dem Makro Q_PROPERTY() definiert wurden). Aber QDesignerPropertySheetExtension bietet auch eine Schnittstelle zum Erstellen von benutzerdefinierten Eigenschaftsblatterweiterungen.
Beachten Sie dabei die folgenden Einschränkungen:
- Qt Widgets Designer verwendet die QDesignerPropertySheetExtension, um seinen Eigenschaftseditor zu füttern. Immer wenn ein Widget in seinem Arbeitsbereich ausgewählt wird, fragt Qt Widgets Designer nach der Property Sheet Extension des Widgets. Wenn das ausgewählte Widget eine implementierte Eigenschaftsblatt-Erweiterung hat, überschreibt diese Erweiterung das Standard-Eigenschaftsblatt.
- Die Datentypen, die vom Eigenschaftsblatt für einige Eigenschaften verwendet werden, sind undurchsichtige benutzerdefinierte QVariant Typen, die zusätzliche Informationen anstelle von einfachen Qt-Datentypen enthalten. Dies ist zum Beispiel der Fall bei Aufzählungen, Flags, Icons, Pixmaps und Strings.
- Qt Widgets Der Eigenschaftseditor des Designers hat keine Implementierung für die Handhabung von Q_PROPERTY Typen für benutzerdefinierte Typen, die mit Q_DECLARE_METATYPE() deklariert wurden.
Um eine Eigenschaftsblatt-Erweiterung zu erstellen, muss Ihre Erweiterungsklasse sowohl von QObject als auch von QDesignerPropertySheetExtension erben. Da wir eine Schnittstelle implementieren, müssen wir sicherstellen, dass sie dem Meta-Objektsystem mit dem Makro Q_INTERFACES() bekannt gemacht wird:
class MyPropertySheetExtension : public QObject, public QDesignerPropertySheetExtension { Q_OBJECT Q_INTERFACES(QDesignerPropertySheetExtension) public: ... }
Dadurch kann Qt Widgets Designer qobject_cast() verwenden, um nach unterstützten Schnittstellen zu suchen, wobei nichts weiter als ein QObject -Zeiger verwendet wird.
In Qt Widgets Designer werden die Erweiterungen erst erstellt, wenn sie benötigt werden. Aus diesem Grund müssen Sie bei der Implementierung einer Eigenschaftsblatt-Erweiterung auch eine QExtensionFactory erstellen, d.h. eine Klasse, die eine Instanz Ihrer Erweiterung erzeugen kann, und diese mit Qt Widgets Designer's extension manager registrieren.
Wenn eine Eigenschaftsblatt-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 Eigenschaftsblatt-Erweiterung für das ausgewählte Widget zu erstellen. Diese Fabrik wird dann eine Instanz der Erweiterung erstellen. Wenn keine solche Fabrik gefunden wird, verwendet Qt Widgets Designer das Standard-Eigenschaftsblatt.
Es gibt vier Arten von Erweiterungen in Qt Widgets Designer: QDesignerContainerExtension, QDesignerMemberSheetExtension, QDesignerPropertySheetExtension und QDesignerTaskMenuExtension. Qt Designer verhält sich 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(QDesignerPropertySheetExtension)) return 0; if (MyCustomWidget *widget = qobject_cast<MyCustomWidget*> (object)) return new MyPropertySheetExtension(widget, parent); return 0; }
Oder Sie können eine bestehende Fabrik verwenden und die Funktion QExtensionFactory::createExtension() erweitern, damit die Fabrik auch eine Eigenschaftsblatt-Erweiterung erstellen kann. 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(QDesignerPropertySheetExtension))) { return new MyPropertySheetExtension(widget, parent); } else { return 0; } }
Ein vollständiges Beispiel für die Verwendung einer Erweiterungsklasse finden Sie im Beispiel Aufgabenmenü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 QDesignerDynamicPropertySheetExtension, QExtensionFactory, QExtensionManager, und Erstellen von benutzerdefinierten Widget-Erweiterungen.
Dokumentation der Mitgliedsfunktionen
[virtual constexpr noexcept]
QDesignerPropertySheetExtension::~QDesignerPropertySheetExtension()
Zerstört die Eigenschaftsblatt-Erweiterung.
[pure virtual]
int QDesignerPropertySheetExtension::count() const
Gibt die Anzahl der Eigenschaften des ausgewählten Widgets zurück.
[pure virtual]
bool QDesignerPropertySheetExtension::hasReset(int index) const
Gibt true zurück, wenn die Eigenschaft unter der angegebenen index im Eigenschaftseditor von Qt Widgets Designer eine Schaltfläche zum Zurücksetzen hat, andernfalls false.
Siehe auch indexOf() und reset().
[pure virtual]
int QDesignerPropertySheetExtension::indexOf(const QString &name) const
Gibt den Index für eine bestimmte Eigenschaft name zurück.
Siehe auch propertyName().
[pure virtual]
bool QDesignerPropertySheetExtension::isAttribute(int index) const
Gibt true zurück, wenn die Eigenschaft unter der angegebenen index ein Attribut ist, das aus der UI-Datei ausgeschlossen wird, andernfalls false.
Siehe auch indexOf() und setAttribute().
[pure virtual]
bool QDesignerPropertySheetExtension::isChanged(int index) const
Gibt true zurück, wenn der Wert der Eigenschaft unter der angegebenen index vom Standardwert der Eigenschaft abweicht, andernfalls false.
Siehe auch indexOf(), setChanged(), und reset().
[pure virtual]
bool QDesignerPropertySheetExtension::isEnabled(int index) const
Gibt true zurück, wenn die Eigenschaft unter der angegebenen index im Eigenschaftseditor von Qt Widgets Designer aktiviert ist, andernfalls false.
Siehe auch indexOf().
[pure virtual]
bool QDesignerPropertySheetExtension::isVisible(int index) const
Gibt true zurück, wenn die Eigenschaft unter der angegebenen index im Eigenschaftseditor von Qt Widgets Designer sichtbar ist, andernfalls false.
Siehe auch indexOf() und setVisible().
[pure virtual]
QVariant QDesignerPropertySheetExtension::property(int index) const
Gibt den Wert der Eigenschaft unter der angegebenen index zurück.
Siehe auch indexOf(), setProperty(), und propertyGroup().
[pure virtual]
QString QDesignerPropertySheetExtension::propertyGroup(int index) const
Gibt die Eigenschaftsgruppe für die Eigenschaft unter der angegebenen index zurück.
Qt Widgets Der Eigenschaftseditor des Designers unterstützt Eigenschaftsgruppen, d.h. Abschnitte von verwandten Eigenschaften. Eine Eigenschaft kann mit Hilfe der Funktion setPropertyGroup() mit einer Gruppe verbunden werden. Die Standardgruppe einer beliebigen Eigenschaft ist der Name der Klasse, die sie definiert. Zum Beispiel erscheint die Eigenschaft QObject::objectName innerhalb der Eigenschaftsgruppe QObject.
Siehe auch indexOf() und setPropertyGroup().
[pure virtual]
QString QDesignerPropertySheetExtension::propertyName(int index) const
Gibt den Namen der Eigenschaft unter der angegebenen Adresse index zurück.
Siehe auch indexOf().
[pure virtual]
bool QDesignerPropertySheetExtension::reset(int index)
Setzt den Wert der Eigenschaft unter der angegebenen Adresse index auf den Standardwert zurück. Gibt true zurück, wenn ein Standardwert gefunden werden konnte, andernfalls false.
Siehe auch indexOf(), hasReset(), und isChanged().
[pure virtual]
void QDesignerPropertySheetExtension::setAttribute(int index, bool attribute)
Wenn attribute wahr ist, wird die Eigenschaft an der angegebenen index zu einem Attribut gemacht, das von der UI-Datei ausgeschlossen wird; andernfalls wird sie einbezogen.
Siehe auch indexOf() und isAttribute().
[pure virtual]
void QDesignerPropertySheetExtension::setChanged(int index, bool changed)
Legt fest, ob sich die Eigenschaft an der angegebenen index von ihrem Standardwert unterscheidet oder nicht, je nach dem Parameter changed.
Siehe auch indexOf() und isChanged().
[pure virtual]
void QDesignerPropertySheetExtension::setProperty(int index, const QVariant &value)
Setzt die value der Eigenschaft auf die angegebene index.
Warnung: Wenn Sie den Wert einer Eigenschaft mit dieser Funktion ändern, wird der Rückgängig-Stapel nicht aktualisiert. Um sicherzustellen, dass der Wert einer Eigenschaft über den Rückgängig-Stapel rückgängig gemacht werden kann, müssen Sie stattdessen die Funktion QDesignerFormWindowCursorInterface::setProperty() oder ihren Buddy setWidgetProperty() verwenden.
Siehe auch indexOf(), property(), und propertyGroup().
[pure virtual]
void QDesignerPropertySheetExtension::setPropertyGroup(int index, const QString &group)
Setzt die Eigenschaftsgruppe für die Eigenschaft unter der angegebenen Adresse index auf group.
Wenn Sie eine Eigenschaft einer Gruppe zuordnen, wird sie im Eigenschaftseditor im Abschnitt dieser Gruppe angezeigt. Die Standardeigenschaftsgruppe einer beliebigen Eigenschaft ist der Name der Klasse, die sie definiert. Zum Beispiel erscheint die Eigenschaft QObject::objectName in der Eigenschaftsgruppe QObject.
Siehe auch indexOf(), property(), und propertyGroup().
[pure virtual]
void QDesignerPropertySheetExtension::setVisible(int index, bool visible)
Wenn visible wahr ist, ist die Eigenschaft an der angegebenen index im Eigenschaftseditor von Qt Widgets Designer sichtbar; andernfalls ist die Eigenschaft verborgen.
© 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.