QDesignerTaskMenuExtension Class
Mit der Klasse „QDesignerTaskMenuExtension“ können Sie dem Aufgabenmenü des „ Qt Widgets “-Designers benutzerdefinierte Menüeinträge hinzufügen. Mehr...
| Überschrift: | #include <QDesignerTaskMenuExtension> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Designer) target_link_libraries(mytarget PRIVATE Qt6::Designer) |
| qmake: | QT += designer |
Öffentliche Funktionen
| QDesignerTaskMenuExtension() | |
| QDesignerTaskMenuExtension(const QDesignerTaskMenuExtension &) | |
| QDesignerTaskMenuExtension(QDesignerTaskMenuExtension &&) | |
| virtual | ~QDesignerTaskMenuExtension() |
| virtual QAction * | preferredEditAction() const |
| virtual QList<QAction *> | taskActions() const = 0 |
| QDesignerTaskMenuExtension & | operator=(QDesignerTaskMenuExtension &&) |
| QDesignerTaskMenuExtension & | operator=(const QDesignerTaskMenuExtension &) |
Ausführliche Beschreibung
QDesignerTaskMenuExtension bietet eine Schnittstelle zum Erstellen benutzerdefinierter Erweiterungen für das Aufgabenmenü. Sie wird in der Regel verwendet, um Aufgabenmenüeinträge zu erstellen, die spezifisch für ein Plugin im „ Qt Widgets -Designer“ sind.
Qt Widgets Der Designer nutzt die `QDesignerTaskMenuExtension`, um sein Aufgabenmenü zu füllen. Immer wenn ein Aufgabenmenü angefordert wird, fragt der „ Qt Widgets Designer“ nach der Aufgabenmenü-Erweiterung des ausgewählten Widgets.
Qt Widgets Designer." src="images/taskmenuextension-example.webp" title="Screenshot einer benutzerdefinierten Aktion „Status bearbeiten…“ im Kontextmenü des Qt Widgets Designer."/>
Eine Aufgabenmenü-Erweiterung ist eine Sammlung von `QActions`. Die Aktionen erscheinen als Einträge im Aufgabenmenü, wenn das Plugin mit der angegebenen Erweiterung ausgewählt wird. Das obige Bild zeigt die benutzerdefinierte Aktion „Zustand bearbeiten…“, die zusätzlich zu den Standard-Aufgabenmenüeinträgen des ` Qt Widgets Designer` angezeigt wird: Ausschneiden, Kopieren, Einfügen usw.
Um eine benutzerdefinierte Aufgabenmenü-Erweiterung zu erstellen, muss Ihre Erweiterungsklasse sowohl von „ QObject “ als auch von „QDesignerTaskMenuExtension“ erben. Zum Beispiel:
class MyTaskMenuExtension : public QObject,
public QDesignerTaskMenuExtension
{
Q_OBJECT
Q_INTERFACES(QDesignerTaskMenuExtension)
public:
MyTaskMenuExtension(MyCustomWidget *widget, QObject *parent);
QAction *preferredEditAction() const;
QList<QAction *> taskActions() const;
private slots:
void mySlot();
private:
MyCustomWidget *widget;
QAction *myAction;
};Da wir eine Schnittstelle implementieren, müssen wir sicherstellen, dass diese dem Metaobjektsystem mithilfe des Makros „ Q_INTERFACES()“ bekannt gemacht wird. Dadurch kann „ Qt Widgets Designer“ die Funktion „ qobject_cast()“ nutzen, um anhand eines reinen „ QObject “-Zeigers nach unterstützten Schnittstellen abzufragen.
Sie müssen die Funktion ` taskActions()` neu implementieren, um eine Liste von Aktionen zurückzugeben, die in das Aufgabenmenü des „ Qt Widgets Designer“ aufgenommen werden sollen. Optional können Sie die Funktion ` preferredEditAction()` neu implementieren, um die Aktion festzulegen, die aufgerufen wird, wenn Sie Ihr Plugin auswählen und die Taste F2 drücken. Die bevorzugte Bearbeitungsaktion muss eine der von ` taskActions()` zurückgegebenen Aktionen sein; ist sie nicht definiert, wird das Drücken der Taste F2 einfach ignoriert.
Im „ Qt Widgets “-Designer werden Erweiterungen erst dann erstellt, wenn sie benötigt werden. Eine Aufgabenmenü-Erweiterung wird beispielsweise erstellt, wenn Sie mit der rechten Maustaste auf ein Widget im Arbeitsbereich des „ Qt Widgets “-Designers klicken. Aus diesem Grund müssen Sie außerdem eine Erweiterungsfabrik erstellen – entweder mithilfe von ` QExtensionFactory ` oder einer Unterklasse – und diese über „ extension manager “ im „ Qt Widgets “-Designer registrieren.
Wenn eine Aufgabenmenü-Erweiterung benötigt wird, durchläuft „ extension manager “ im „ Qt Widgets Designer“ alle registrierten Fabriken und ruft für jede davon „ QExtensionFactory::createExtension()“ auf, bis eine gefunden wird, die eine Aufgabenmenü-Erweiterung für das ausgewählte Widget erstellen kann. Diese Fabrik erstellt dann eine Instanz der Erweiterung.
Im „ Qt Widgets Designer“ stehen vier Arten von Erweiterungen zur Verfügung: „ QDesignerContainerExtension “, „ QDesignerMemberSheetExtension “, „ QDesignerPropertySheetExtension “ und „QDesignerTaskMenuExtension“. Das Verhalten des „ Qt Widgets Designers“ ist unabhängig davon, ob die angeforderte Erweiterung einem Container, einem Member-Sheet, einem Property-Sheet oder einem Aufgabenmenü zugeordnet ist.
Die Klasse „ QExtensionFactory “ stellt eine Standard-Erweiterungsfabrik bereit und kann auch als Schnittstelle für benutzerdefinierte Erweiterungsfabriken verwendet werden. Sie können entweder eine neue „ QExtensionFactory “-Instanz erstellen und die Funktion „ QExtensionFactory::createExtension()“ neu implementieren. Beispiel:
QObject *ANewExtensionFactory::createExtension(QObject *object,
const QString &iid, QObject *parent) const
{
if (iid != Q_TYPEID(QDesignerTaskMenuExtension))
return 0;
if (MyCustomWidget *widget = qobject_cast<MyCustomWidget*>(object))
return new MyTaskMenuExtension(widget, parent);
return 0;
}Oder Sie können eine vorhandene Factory verwenden und die Funktion ` QExtensionFactory::createExtension()` erweitern, damit die Factory auch eine Task-Menü-Erweiterung erstellen kann. Zum Beispiel:
QObject *AGeneralExtensionFactory::createExtension(QObject *object,
const QString &iid, QObject *parent) const
{
MyCustomWidget *widget = qobject_cast<MyCustomWidget*>(object);
if (widget && (iid == Q_TYPEID(QDesignerContainerExtension))) {
return new MyContainerExtension(widget, parent);
} else if (widget && (iid == Q_TYPEID(QDesignerTaskMenuExtension))) {
return new MyTaskMenuExtension(widget, parent);
} else {
return 0;
}
}Ein vollständiges Beispiel für die Verwendung der Klasse `QDesignerTaskMenuExtension` finden Sie im Beispiel „Task-Menü-Erweiterung“. Das Beispiel zeigt, wie Sie ein benutzerdefiniertes Widget-Plugin für den ` Qt Widgets `-Designer erstellen und wie Sie mithilfe der Klasse `QDesignerTaskMenuExtension` benutzerdefinierte Einträge zum Task-Menü des ` Qt Widgets `-Designers hinzufügen können.
Siehe auch „ QExtensionFactory“ , „ QExtensionManager “ und „Erstellen benutzerdefinierter Widget-Erweiterungen“.
Dokumentation zu den Member-Funktionen
[constexpr noexcept default] QDesignerTaskMenuExtension::QDesignerTaskMenuExtension()
Erstellt standardmäßig eine Instanz von ` QDesignerTaskMenuExtension`.
[delete] QDesignerTaskMenuExtension::QDesignerTaskMenuExtension(const QDesignerTaskMenuExtension &)
Erstellt eine Instanz von „ QDesignerTaskMenuExtension “ durch Kopieren. Diese Funktion wurde gelöscht.
[delete] QDesignerTaskMenuExtension::QDesignerTaskMenuExtension(QDesignerTaskMenuExtension &&)
Erstellt eine Instanz von ` QDesignerTaskMenuExtension`. Diese Funktion wurde gelöscht.
[virtual noexcept] QDesignerTaskMenuExtension::~QDesignerTaskMenuExtension()
Löscht die Erweiterung des Aufgabenmenüs.
[virtual] QAction *QDesignerTaskMenuExtension::preferredEditAction() const
Gibt die Aktion zurück, die aufgerufen wird, wenn ein Plugin mit der angegebenen Erweiterung ausgewählt und die Taste F2 gedrückt wird.
Die Aktion muss eine der Aktionen sein, die von ` taskActions()` zurückgegeben werden.
[pure virtual] QList<QAction *> QDesignerTaskMenuExtension::taskActions() const
Gibt die Erweiterung des Aufgabenmenüs als Liste von Aktionen zurück, die in das Aufgabenmenü des „ Qt Widgets -Designers“ aufgenommen werden, wenn ein Plugin mit der angegebenen Erweiterung ausgewählt wird.
Die Funktion muss neu implementiert werden, um der Liste Aktionen hinzuzufügen.
[delete] QDesignerTaskMenuExtension &QDesignerTaskMenuExtension::operator=(QDesignerTaskMenuExtension &&)
Weist „ other “ dieser „ QDesignerTaskMenuExtension “-Instanz zu. Diese Funktion wird gelöscht.
[delete] QDesignerTaskMenuExtension &QDesignerTaskMenuExtension::operator=(const QDesignerTaskMenuExtension &)
other Weist dieser „ QDesignerTaskMenuExtension “-Instanz „ “ per Kopierzuweisung zu. Diese Funktion wird gelöscht.
© 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.