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

詳しい説明

アプリケーションのほとんどのアクションは、メニューの項目やツールバーのボタンとして表現されます。しかし、時にはもっと複雑なウィジェットが必要になることもあります。例えば、ワープロのズーム・アクションは、QToolBarQComboBox を使って実現されるかもしれません。QToolBar は、単一のウィジェットを挿入するための便利な関数としてQToolBar::insertWidget() を提供します。しかし、複数のコンテナで視覚化するためにカスタムウィジェットを使用するアクションを実装したい場合は、QWidgetActionをサブクラス化する必要があります。

QWidgetActionが例えばQToolBar に追加されると、QWidgetAction::createWidget()が呼び出されます。この関数の再実装は、指定された親を持つ新しいカスタムウィジェットを作成する必要があります。

アクションがコンテナウィジェットから削除された場合、QWidgetAction::deleteWidget() が、以前に作成されたカスタムウィジェットを引数として呼び出されます。デフォルトの実装では、ウィジェットは非表示になり、QObject::deleteLater() を使用して削除されます。

カスタム・ウィジェットが 1 つしかない場合は、setDefaultWidget() を使用して、そのウィジェットをデフォルト・ウィジェットに設定できます。そのウィジェットは、アクションがQToolBar 、または一般的にQWidgetActionをサポートするアクションコンテナに追加された場合に使用されます。デフォルト・ウィジェットのみを持つQWidgetActionが同時に2つのツールバーに追加された場合、デフォルト・ウィジェットは、アクションが追加された最初のツールバーだけに表示されます。QWidgetActionは、デフォルト・ウィジェットの所有権を引き継ぎます。

例えば、マウスイベントハンドラを再実装し、QAction::trigger() を呼び出すなどして、アクションをアクティブにするのはウィジェット次第であることに注意してください。

macOS: macOS上でアプリケーションのメニューバーのメニューにウィジェットを追加すると、ウィジェットが追加され、機能しますが、いくつかの制限があります:

  1. ウィジェットは、QMenu からネイティブ・メニュー・ビューに再配置されます。他の場所(例えばポップアップメニュー)にメニューを表示すると、ウィジェットはそこに存在しません。
  2. ウィジェットのフォーカス/キーボード処理はできません。
  3. Appleの設計により、ウィジェットのマウストラッキングは現在動作しません。
  4. モーダルダイアログを開くスロットにtriggered() シグナルを接続すると、macOS 10.4 でクラッシュが発生します (Apple が認めた既知のバグ)。

QActionQActionGroupQWidgetも参照してください

メンバー関数ドキュメント

[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()も参照してください

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