QWidgetAction Class

Die Klasse QWidgetAction erweitert QAction um eine Schnittstelle zum Einfügen benutzerdefinierter Widgets in aktionsbasierte Container, wie z.B. Symbolleisten. Mehr...

Kopfzeile: #include <QWidgetAction>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
Vererbt: QAction

Öffentliche Funktionen

QWidgetAction(QObject *parent)
virtual ~QWidgetAction()
QWidget *defaultWidget() const
void releaseWidget(QWidget *widget)
QWidget *requestWidget(QWidget *parent)
void setDefaultWidget(QWidget *widget)

Geschützte Funktionen

virtual QWidget *createWidget(QWidget *parent)
QList<QWidget *> createdWidgets() const
virtual void deleteWidget(QWidget *widget)

Reimplementierte geschützte Funktionen

virtual bool event(QEvent *event) override
virtual bool eventFilter(QObject *obj, QEvent *event) override

Detaillierte Beschreibung

Die meisten Aktionen in einer Anwendung werden als Einträge in Menüs oder Schaltflächen in Symbolleisten dargestellt. Manchmal sind jedoch komplexere Widgets erforderlich. Zum Beispiel kann eine Zoom-Aktion in einem Textverarbeitungsprogramm durch ein QComboBox in einem QToolBar realisiert werden, das eine Reihe von verschiedenen Zoom-Stufen darstellt. QToolBar bietet QToolBar::insertWidget() als Komfortfunktion zum Einfügen eines einzelnen Widgets. Wenn Sie jedoch eine Aktion implementieren möchten, die benutzerdefinierte Widgets für die Visualisierung in mehreren Containern verwendet, müssen Sie die Unterklasse QWidgetAction verwenden.

Wenn eine QWidgetAction zum Beispiel zu einer QToolBar hinzugefügt wird, wird QWidgetAction::createWidget() aufgerufen. Reimplementierungen dieser Funktion sollten ein neues benutzerdefiniertes Widget mit dem angegebenen Elternteil erstellen.

Wenn die Aktion aus einem Container-Widget entfernt wird, dann wird QWidgetAction::deleteWidget() mit dem zuvor erstellten benutzerdefinierten Widget als Argument aufgerufen. Die Standardimplementierung blendet das Widget aus und löscht es mit QObject::deleteLater().

Wenn Sie nur ein einziges benutzerdefiniertes Widget haben, können Sie es mit setDefaultWidget() als Standard-Widget festlegen. Dieses Widget wird dann verwendet, wenn die Aktion zu einem QToolBar oder allgemein zu einem Aktionscontainer, der QWidgetAction unterstützt, hinzugefügt wird. Wenn eine QWidgetAction mit nur einem Standard-Widget zu zwei Symbolleisten gleichzeitig hinzugefügt wird, wird das Standard-Widget nur in der ersten Symbolleiste angezeigt, zu der die Aktion hinzugefügt wurde. QWidgetAction übernimmt die Verantwortung für das Standard-Widget.

Beachten Sie, dass es am Widget liegt, die Aktion zu aktivieren, zum Beispiel durch die Neuimplementierung von Maus-Ereignishandlern und den Aufruf von QAction::trigger().

macOS: Wenn Sie unter macOS ein Widget zu einem Menü in der Menüleiste der Anwendung hinzufügen, wird das Widget hinzugefügt und es funktioniert, allerdings mit einigen Einschränkungen:

  1. Das Widget wird von der QMenu auf die native Menüansicht repariert. Wenn Sie das Menü an einer anderen Stelle anzeigen (z.B. als Popup-Menü), wird das Widget dort nicht erscheinen.
  2. Focus/Keyboard-Handling des Widgets ist nicht möglich.
  3. Aufgrund von Apples Design funktioniert die Mausverfolgung auf dem Widget derzeit nicht.
  4. Das Verbinden des triggered()-Signals mit einem Slot, der einen modalen Dialog öffnet, führt unter macOS 10.4 zu einem Absturz (bekannter und von Apple bestätigter Fehler), eine Abhilfe ist die Verwendung einer QueuedConnection statt einer DirectConnection.

Siehe auch QAction, QActionGroup, und QWidget.

Dokumentation der Mitgliedsfunktionen

[explicit] QWidgetAction::QWidgetAction(QObject *parent)

Konstruiert eine Aktion mit parent.

[virtual noexcept] QWidgetAction::~QWidgetAction()

Zerstört das Objekt und gibt zugewiesene Ressourcen frei.

[virtual protected] QWidget *QWidgetAction::createWidget(QWidget *parent)

Diese Funktion wird immer dann aufgerufen, wenn die Aktion zu einem Container-Widget hinzugefügt wird, das benutzerdefinierte Widgets unterstützt. Wenn Sie nicht möchten, dass ein benutzerdefiniertes Widget als Repräsentation der Aktion in dem angegebenen parent Widget verwendet wird, sollte 0 zurückgegeben werden.

Siehe auch deleteWidget().

[protected] QList<QWidget *> QWidgetAction::createdWidgets() const

Gibt die Liste der Widgets zurück, die createWidget() verwendet haben und derzeit von Widgets verwendet werden, denen die Aktion hinzugefügt wurde.

QWidget *QWidgetAction::defaultWidget() const

Gibt das Standard-Widget zurück.

Siehe auch setDefaultWidget().

[virtual protected] void QWidgetAction::deleteWidget(QWidget *widget)

Diese Funktion wird immer dann aufgerufen, wenn die Aktion aus einem Container-Widget entfernt wird, das die Aktion über ein zuvor mit createWidget() erstelltes benutzerdefiniertes widget anzeigt. Die Standardimplementierung verbirgt die widget und plant ihre Löschung mit QObject::deleteLater().

Siehe auch createWidget().

[override virtual protected] bool QWidgetAction::event(QEvent *event)

Reimplements: QAction::event(QEvent *e).

[override virtual protected] bool QWidgetAction::eventFilter(QObject *obj, QEvent *event)

Reimplements: QObject::eventFilter(QObject *watched, QEvent *event).

void QWidgetAction::releaseWidget(QWidget *widget)

Gibt das angegebene widget frei.

Container-Widgets, die Aktionen unterstützen, rufen diese Funktion auf, wenn eine Widget-Aktion entfernt wird.

Siehe auch requestWidget(), deleteWidget(), und defaultWidget().

QWidget *QWidgetAction::requestWidget(QWidget *parent)

Gibt ein Widget zurück, das die Aktion mit der angegebenen parent darstellt.

Container-Widgets, die Aktionen unterstützen, können diese Funktion aufrufen, um ein Widget als visuelle Darstellung der Aktion anzufordern.

Siehe auch releaseWidget(), createWidget(), und defaultWidget().

void QWidgetAction::setDefaultWidget(QWidget *widget)

Setzt widget auf das Standard-Widget. Der Besitz wird auf QWidgetAction übertragen. Sofern createWidget() nicht von einer Unterklasse neu implementiert wird, um ein neues Widget zurückzugeben, wird das Standard-Widget verwendet, wenn ein Container-Widget ein Widget über requestWidget() anfordert.

Siehe auch defaultWidget().

© 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.