QDesignerTaskMenuExtension Class

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

Header: #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は選択されたウィジェットのタスクメニュー拡張子を問い合わせます。

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

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

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

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

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

QExtensionFactory,QExtensionManager,カスタムウィジェット拡張機能の作成も参照してください

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

[virtual noexcept] QDesignerTaskMenuExtension::~QDesignerTaskMenuExtension()

タスクメニュー拡張機能を破棄します。

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

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

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

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

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

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

©2024 The Qt Company Ltd. 本書に含まれるドキュメントの著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。