このページでは

QDesignerTaskMenuExtension Class

QDesignerTaskMenuExtension クラスを使用すると、Qt Widgets Designer のタスクメニューにカスタムメニュー項目を追加することができます。詳細...

ヘッダー: #include <QDesignerTaskMenuExtension>
CMake: find_package(Qt6 REQUIRED COMPONENTS Designer)
target_link_libraries(mytarget PRIVATE Qt6::Designer)
qmake: QT += designer

パブリック関数

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 &)

詳細な説明

QDesignerTaskMenuExtension は、カスタムタスクメニュー拡張機能を作成するためのインターフェースを提供します。これは通常、Qt Widgets Designer 内のプラグイン固有のタスクメニュー項目を作成するために使用されます。

Qt Widgets Designer Qt Widgets Designer は、QDesignerTaskMenuExtensionを使用してタスクメニューを構成します。タスクメニューが要求されるたびに、 は選択されたウィジェットのタスクメニュー拡張機能を照会します。

<span translate=Qt Widgets Designerのコンテキストメニューにある、カスタム「状態の編集...」アクションのスクリーンショット。" src="images/taskmenuextension-example.webp" title="Qt Widgets Designerのコンテキストメニューにある、カスタム「状態の編集...」アクションのスクリーンショット。"/>

タスクメニュー拡張機能は、QAction の集合体です。指定された拡張機能を持つプラグインが選択されると、これらのアクションがタスクメニューのエントリとして表示されます。上の画像は、Qt Widgets Designer のデフォルトのタスクメニューエントリ(「切り取り」、「コピー」、「貼り付け」など)に加えて表示される、カスタムアクション「状態の編集...」を示しています。

カスタムタスクメニュー拡張機能を作成するには、拡張クラスがQObject と QDesignerTaskMenuExtension の両方を継承する必要があります。例えば:

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;
};

インターフェースを実装しているため、Q_INTERFACES() マクロを使用して、そのインターフェースがメタオブジェクトシステムに認識されるようにする必要があります。これにより、Qt Widgets Designer はqobject_cast()関数を使用して、QObject ポインタのみを用いてサポートされているインターフェースを照会できるようになります。

また、taskActions() 関数を再実装し、Qt Widgets Designer のタスクメニューに含まれるアクションのリストを返すようにする必要があります。 オプションとして、preferredEditAction() 関数を再実装して、プラグインを選択してF2 キーを押したときに呼び出されるアクションを設定することもできます。優先される編集アクションは、taskActions() によって返されるアクションのいずれかでなければなりません。定義されていない場合、F2キーの押下は単に無視されます。

Qt Widgets Designer では、拡張機能は必要とされるまで作成されません。たとえば、タスクメニュー拡張機能は、Qt Widgets Designer のワークスペース内のウィジェット上でマウスの右ボタンをクリックしたときに作成されます。そのため、QExtensionFactory またはそのサブクラスを使用して拡張機能ファクトリを構築し、Qt Widgets Designer のextension manager を使用して登録する必要があります。

タスクメニュー拡張が必要になると、Qt Widgets Designer のextension manager は、登録されているすべてのファクトリを順に処理し、各ファクトリに対してQExtensionFactory::createExtension()を呼び出し、選択されたウィジェット用のタスクメニュー拡張を作成できるファクトリが見つかるまで続けます。その後、そのファクトリが拡張のインスタンスを作成します。

Qt Widgets Designer では、QDesignerContainerExtension 、QDesignerMemberSheetExtension 、QDesignerPropertySheetExtension 、および QDesignerTaskMenuExtension の4種類の拡張機能が利用可能です。Qt Widgets Designer の動作は、要求された拡張機能がコンテナ、メンバーシート、プロパティシート、またはタスクメニューのいずれに関連付けられているかに関わらず同じです。

QExtensionFactory クラスは標準の拡張機能ファクトリを提供しており、カスタム拡張機能ファクトリのインターフェースとしても使用できます。新しいQExtensionFactory を作成し、QExtensionFactory::createExtension()関数を再実装することもできます。例:

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;
}

あるいは、既存のファクトリを使用し、QExtensionFactory::createExtension() 関数を拡張して、そのファクトリがタスクメニュー拡張も作成できるようにすることもできます。例えば:

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;
    }
}

QDesignerTaskMenuExtension クラスを使用した完全な例については、「タスクメニュー拡張機能」の例を参照してください。この例では、Qt Widgets Designer 用のカスタムウィジェットプラグインの作成方法と、QDesignerTaskMenuExtension クラスを使用してQt Widgets Designer のタスクメニューにカスタム項目を追加する方法を示しています。

QExtensionFactory 、QExtensionManager 、および「カスタムウィジェット拡張機能の作成」も参照してください 。

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

[constexpr noexcept default] QDesignerTaskMenuExtension::QDesignerTaskMenuExtension()

QDesignerTaskMenuExtension のインスタンスをデフォルトコンストラクタで生成します。

[delete] QDesignerTaskMenuExtension::QDesignerTaskMenuExtension(const QDesignerTaskMenuExtension &)

QDesignerTaskMenuExtension のインスタンスをコピーして生成します。この関数は削除されています。

[delete] QDesignerTaskMenuExtension::QDesignerTaskMenuExtension(QDesignerTaskMenuExtension &&)

QDesignerTaskMenuExtension のインスタンスをMoveコンストラクタで生成します。この関数は削除されています。

[virtual noexcept] QDesignerTaskMenuExtension::~QDesignerTaskMenuExtension()

タスクメニューの拡張機能を削除します。

[virtual] QAction *QDesignerTaskMenuExtension::preferredEditAction() const

指定された拡張子を持つプラグインを選択し、F2 キーを押したときに呼び出されるアクションを返します。

このアクションは、taskActions() が返すアクションのいずれかでなければなりません。

[pure virtual] QList<QAction *> QDesignerTaskMenuExtension::taskActions() const

指定された拡張子を持つプラグインが選択された際に、Qt Widgets Designer のタスクメニューに表示されるアクションのリストとして、タスクメニュー拡張子を返します。

この関数は、リストにアクションを追加するために再実装する必要があります。

[delete] QDesignerTaskMenuExtension &QDesignerTaskMenuExtension::operator=(QDesignerTaskMenuExtension &&)

other をこのQDesignerTaskMenuExtension インスタンスに割り当てます。この関数は削除されます。

[delete] QDesignerTaskMenuExtension &QDesignerTaskMenuExtension::operator=(const QDesignerTaskMenuExtension &)

other をこのQDesignerTaskMenuExtension インスタンスにコピー代入します。この関数は削除されます。

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