QWidgetAction Class
QWidgetAction クラスは、QAction を継承し、ツールバーなどのアクションベースのコンテナにカスタムウィジェットを挿入するためのインターフェースを追加したものです。詳細...
| ヘッダー: | #include <QWidgetAction> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake: | QT += widgets |
| 継承元: | QAction |
パブリック関数
| QWidgetAction(QObject *parent) | |
| virtual | ~QWidgetAction() |
| QWidget * | defaultWidget() const |
| void | releaseWidget(QWidget *widget) |
| QWidget * | requestWidget(QWidget *parent) |
| void | setDefaultWidget(QWidget *widget) |
プロテクトされた関数
| virtual QWidget * | createWidget(QWidget *parent) |
| QList<QWidget *> | createdWidgets() const |
| virtual void | deleteWidget(QWidget *widget) |
再実装されたプロテクトされた関数
| virtual bool | event(QEvent *event) override |
| virtual bool | eventFilter(QObject *obj, QEvent *event) override |
詳細な説明
アプリケーションのアクションのほとんどは、メニューの項目やツールバーのボタンとして表現されます。しかし、場合によっては、より複雑なウィジェットが必要になることもあります。 たとえば、ワープロでのズーム操作は、QToolBar 内のQComboBox を使用して、さまざまなズームレベルを表示することで実現できます。QToolBar には、単一のウィジェットを挿入するための便利な関数として、QToolBar::insertWidget()が用意されています。しかし、複数のコンテナ内で表示するためにカスタムウィジェットを使用するアクションを実装したい場合は、QWidgetActionをサブクラス化する必要があります。
例えば、QWidgetActionがQToolBar に追加された場合、QWidgetAction::createWidget()が呼び出されます。この関数の再実装では、指定された親を持つ新しいカスタムウィジェットを作成する必要があります。
アクションがコンテナウィジェットから削除されると、以前に作成されたカスタムウィジェットを引数として、`QWidgetAction::deleteWidget()` が呼び出されます。デフォルトの実装では、ウィジェットを非表示にし、`QObject::deleteLater()` を使用して削除します。
カスタムウィジェットが 1 つしかない場合は、setDefaultWidget() を使用してそれをデフォルトのウィジェットとして設定できます。そうすることで、そのアクションがQToolBar に追加された場合、あるいは一般的に QWidgetAction をサポートするアクションコンテナに追加された場合に、そのウィジェットが使用されるようになります。 デフォルトウィジェットのみを持つ QWidgetAction が 2 つのツールバーに同時に追加された場合、デフォルトウィジェットは、そのアクションが最初に追加されたツールバーでのみ表示されます。QWidgetAction はデフォルトウィジェットの所有権を引き継ぎます。
なお、アクションをアクティブにするかどうかはウィジェット側次第であり、例えば、マウスイベントハンドラを再実装して `QAction::trigger()` を呼び出すなどして行う必要があります。
macOS: macOS のアプリケーションメニューバーのメニューにウィジェットを追加した場合、ウィジェットは追加され機能しますが、いくつかの制限があります:
- ウィジェットは、QMenu からネイティブのメニュービューへと親が変更されます。メニューを別の場所(例:ポップアップメニューとして)に表示した場合、そのウィジェットは表示されません。
- ウィジェットのフォーカスやキーボード操作はできません。
- Appleの設計上の理由により、現在、ウィジェットでのマウス追跡は機能しません。
- triggered() シグナルを、モーダルダイアログを開くスロットに接続すると、macOS 10.4 でクラッシュが発生します(Apple が認めている既知のバグ)。回避策として、DirectConnection の代わりに QueuedConnection を使用してください。
QAction 、QActionGroup 、およびQWidgetも参照してください 。
メンバ関数のドキュメント
[explicit] QWidgetAction::QWidgetAction(QObject *parent)
parent を使用してアクションを構築します。
[virtual noexcept] QWidgetAction::~QWidgetAction()
オブジェクトを破棄し、割り当てられたリソースを解放します。
[virtual protected] QWidget *QWidgetAction::createWidget(QWidget *parent)
この関数は、カスタムウィジェットをサポートするコンテナウィジェットにアクションが追加されるたびに呼び出されます。指定されたparent ウィジェットにおいて、そのアクションの表現としてカスタムウィジェットを使用しない場合は、0を返す必要があります。
deleteWidget()も参照してください 。
[protected] QList<QWidget *> QWidgetAction::createdWidgets() const
createWidget() を使用しており、かつ、そのアクションが追加されたウィジェットによって現在使用されているウィジェットのリストを返します。
QWidget *QWidgetAction::defaultWidget() const
デフォルトのウィジェットを返します。
setDefaultWidget()も参照してください 。
[virtual protected] void QWidgetAction::deleteWidget(QWidget *widget)
この関数は、createWidget() を使用して以前に作成されたカスタム `widget ` を用いてアクションを表示しているコンテナウィジェットから、そのアクションが削除されるたびに呼び出されます。デフォルトの実装では、widget を非表示にし、QObject::deleteLater() を使用してその削除をスケジュールします。
createWidget()も参照してください 。
[override virtual protected] bool QWidgetAction::event(QEvent *event)
QAction::event(QEvent *e) を再実装します。
[override virtual protected] bool QWidgetAction::eventFilter(QObject *obj, QEvent *event)
QObject::eventFilter(QObject *watched, QEvent *event) を再実装します。
void QWidgetAction::releaseWidget(QWidget *widget)
指定されたwidget を解放します。
アクションをサポートするコンテナウィジェットは、ウィジェットのアクションが削除された際にこの関数を呼び出します。
requestWidget()、deleteWidget()、およびdefaultWidget()も参照してください 。
QWidget *QWidgetAction::requestWidget(QWidget *parent)
指定されたparent を持つ、そのアクションを表すウィジェットを返します。
アクションをサポートするコンテナウィジェットは、この関数を呼び出して、そのアクションを視覚的に表現するウィジェットを要求することができます。
releaseWidget()、createWidget()、およびdefaultWidget()も参照してください 。
void QWidgetAction::setDefaultWidget(QWidget *widget)
widget をデフォルトのウィジェットとして設定します。所有権はQWidgetAction に移譲されます。サブクラスによってcreateWidget() が再実装され、新しいウィジェットを返すようにされていない限り、コンテナウィジェットがrequestWidget() を通じてウィジェットを要求した際には、デフォルトのウィジェットが使用されます。
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.