このページでは

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

パブリック関数

virtual ~QDesignerTaskMenuExtension()
virtual QAction *preferredEditAction() const
virtual QList<QAction *> taskActions() const = 0

詳細説明

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

Qt Widgets Designer はQDesignerTaskMenuExtensionを使用してタスクメニューをフィードします。タスクメニューが要求されるたびに、Qt Widgets Designer 、選択されたウィジェットのタスクメニュー拡張を問い合わせます。

<span translate="no">Qt Widgets</span> Designerのコンテキストメニューにあるカスタムアクション "Edit State... "のスクリーンショットです。

タスクメニュー拡張はQActionsのコレクションです。指定された拡張子を持つプラグインが選択されたとき、アクションはタスクメニューの項目として現れます。上の画像は、Qt Widgets Designer のデフォルトのタスクメニューエントリーに加えて表示される、カスタムのEdit State...アクションを示しています:カットコピーペーストなど

カスタムタスクメニュー拡張機能を作成するには、拡張機能クラスを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 Designerqobject_cast() 関数を使用して、QObject ポインタだけを使用してサポートされているインターフェイスを問い合わせることができます。

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

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

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

Qt Widgets Designer には、QDesignerContainerExtensionQDesignerMemberSheetExtensionQDesignerPropertySheetExtension 、および QDesignerTaskMenuExtension の 4 種類のエクステンションがあります。Qt Widgets DesignerQDesignerTaskMenuExtension の動作は、要求された拡張機能がコンテナ、メンバシート、プロパティシート、タスクメニューのいずれに関連付けられていても同じです。

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クラスを使用した完全な例については、Task Menu Extensionの例を参照してください。この例では、Qt Widgets Designer のカスタムウィジェットプラグインを作成する方法と、QDesignerTaskMenuExtension クラスを使用してQt Widgets Designer のタスクメニューにカスタム項目を追加する方法を示します。

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

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

[virtual noexcept] QDesignerTaskMenuExtension::~QDesignerTaskMenuExtension()

タスクメニュー拡張を破棄する。

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

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

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

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

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

リストにアクションを追加するには、この関数を再実装しなければなりません。

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