QWidgetAction Class
Die Klasse „QWidgetAction“ erweitert „ QAction “ um eine Schnittstelle zum Einfügen benutzerdefinierter Widgets in aktionsbasierte Container, wie beispielsweise Symbolleisten. Mehr...
| Header: | #include <QWidgetAction> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake: | QT += widgets |
| Erbt von: | 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) |
Neu implementierte geschützte Funktionen
| virtual bool | event(QEvent *event) override |
| virtual bool | eventFilter(QObject *obj, QEvent *event) override |
Ausführliche Beschreibung
Die meisten Aktionen in einer Anwendung werden als Einträge in Menüs oder als Schaltflächen in Symbolleisten dargestellt. Manchmal sind jedoch komplexere Widgets erforderlich. Beispielsweise kann eine Zoom-Aktion in einem Textverarbeitungsprogramm mithilfe eines „ QComboBox “ in einem „ QToolBar “ realisiert werden, wodurch verschiedene Zoomstufen dargestellt werden. „ QToolBar “ stellt „ QToolBar::insertWidget()“ als Komfortfunktion zum Einfügen eines einzelnen Widgets bereit. Wenn Sie jedoch eine Aktion implementieren möchten, die benutzerdefinierte Widgets zur Visualisierung in mehreren Containern verwendet, müssen Sie eine Unterklasse von „QWidgetAction“ erstellen.
Wird eine `QWidgetAction` beispielsweise zu einem ` QToolBar ` hinzugefügt, wird ` QWidgetAction::createWidget()` aufgerufen. Neaimplementierungen dieser Funktion sollten ein neues benutzerdefiniertes Widget mit dem angegebenen übergeordneten Widget erstellen.
Wird die Aktion aus einem Container-Widget entfernt, wird ` QWidgetAction::deleteWidget()` mit dem zuvor erstellten benutzerdefinierten Widget als Argument aufgerufen. Die Standardimplementierung blendet das Widget aus und löscht es mithilfe von ` 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 hinzugefügt wird, der `QWidgetAction` unterstützt. Wird eine `QWidgetAction` mit nur einem Standard-Widget gleichzeitig zu zwei Symbolleisten hinzugefügt, wird das Standard-Widget nur in der ersten Symbolleiste angezeigt, zu der die Aktion hinzugefügt wurde. `QWidgetAction` übernimmt die Eigentümerschaft über das Standard-Widget.
Beachten Sie, dass es dem Widget obliegt, die Aktion zu aktivieren, beispielsweise durch die Neuimplementierung von Mausereignis-Handlern 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 zwar hinzugefügt und funktioniert auch, allerdings mit einigen Einschränkungen:
- Das Widget wird vom „ QMenu “ auf die native Menüansicht umgeleitet. Wenn Sie das Menü an einer anderen Stelle anzeigen (z. B. als Popup-Menü), ist das Widget dort nicht vorhanden.
- Die Fokus- und Tastatursteuerung des Widgets ist nicht möglich.
- Aufgrund der Gestaltung durch Apple funktioniert die Mausverfolgung auf dem Widget derzeit nicht.
- Das Verbinden des Signals „ triggered “ () mit einem Slot, der einen modalen Dialog öffnet, führt unter macOS 10.4 zu einem Absturz (bekannter, von Apple bestätigter Fehler); als Workaround kann anstelle einer „DirectConnection“ eine „QueuedConnection“ verwendet werden.
Siehe auch „ QAction “, „ QActionGroup “ und „ QWidget “.
Dokumentation zu Mitgliedsfunktionen
[explicit] QWidgetAction::QWidgetAction(QObject *parent)
Erstellt eine Aktion mit „ parent “.
[virtual noexcept] QWidgetAction::~QWidgetAction()
Löscht das Objekt und gibt die zugewiesenen Ressourcen frei.
[virtual protected] QWidget *QWidgetAction::createWidget(QWidget *parent)
Diese Funktion wird immer dann aufgerufen, wenn die Aktion einem Container-Widget hinzugefügt wird, das benutzerdefinierte Widgets unterstützt. Wenn Sie nicht möchten, dass ein benutzerdefiniertes Widget als Darstellung der Aktion im angegebenen „ parent “-Widget verwendet wird, sollte der Wert 0 zurückgegeben werden.
Siehe auch ` deleteWidget()`.
[protected] QList<QWidget *> QWidgetAction::createdWidgets() const
Gibt die Liste der Widgets zurück, für die ` createWidget()` verwendet wurde und die derzeit von den Widgets genutzt 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 mithilfe eines benutzerdefinierten „ widget “ anzeigt, das zuvor mit „ createWidget()“ erstellt wurde. Die Standardimplementierung blendet das „ widget “ aus und plant dessen Löschung mithilfe von „ QObject::deleteLater()“.
Siehe auch ` createWidget()`.
[override virtual protected] bool QWidgetAction::event(QEvent *event)
Implementiert: ` QAction::event(QEvent *e)`.
[override virtual protected] bool QWidgetAction::eventFilter(QObject *obj, QEvent *event)
Implementiert: 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 darstellt, mit dem angegebenen ` parent`.
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)
Legt „ widget “ als Standard-Widget fest. Die Eigentumsrechte werden an „ 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 über „ requestWidget()“ ein Widget anfordert.
Siehe auch ` defaultWidget()`.
© 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.