QExtensionManager Class

QExtensionManager クラスは、Qt Widgets Designer の拡張機能管理機能を提供します。詳細...

Header: #include <QExtensionManager>
CMake: find_package(Qt6 REQUIRED COMPONENTS Designer)
target_link_libraries(mytarget PRIVATE Qt6::Designer)
qmake: QT += designer
Inherits: QObject and QAbstractExtensionManager

パブリック関数

QExtensionManager(QObject *parent = nullptr)
virtual ~QExtensionManager()

再実装パブリック関数

virtual QObject *extension(QObject *object, const QString &iid) const override
virtual void registerExtensions(QAbstractExtensionFactory *factory, const QString &iid = QString()) override
virtual void unregisterExtensions(QAbstractExtensionFactory *factory, const QString &iid = QString()) override
T qt_extension(QAbstractExtensionManager *manager, QObject *object)

マクロ

Q_DECLARE_EXTENSION_INTERFACE(ExtensionName, Identifier)

詳細説明

Qt Widgets Designerでは、拡張機能は必要になるまで作成されません。そのため、拡張機能を実装する際には、QExtensionFactory 、つまり拡張機能のインスタンスを作成できるクラスを作成し、Qt Widgets Designerの拡張機能マネージャを使用して登録する必要があります。

拡張機能ファクトリの登録は、通常QDesignerCustomWidgetInterface::initialize() 関数で行います:

        void MyPlugin::initialize(QDesignerFormEditorInterface *formEditor)
        {
            if (initialized)
                return;

            auto *manager = formEditor->extensionManager();
            Q_ASSERT(manager != nullptr);

            manager->registerExtensions(new MyExtensionFactory(manager),
                                        Q_TYPEID(QDesignerTaskMenuExtension));

            initialized = true;
        }

QExtensionManagerは直接インスタンス化することを意図していません。QDesignerFormEditorInterface::extensionManager() 関数を使用して、Qt Widgets Designer の拡張機能マネージャへのインターフェイスを取得できます。Qt Widgets Designerの現在のQDesignerFormEditorInterface オブジェクト(上記の例ではformEditor )へのポインタは、QDesignerCustomWidgetInterface::initialize ()関数のパラメータで提供されます。カスタムウィジェットプラグインを実装する場合、QDesignerCustomWidgetInterface をサブクラス化してプラグインを Qt Widgets Designer に公開する必要があります。

その後、拡張機能が必要になると、Qt Widgets Designerの拡張機能マネージャは、選択したオブジェクトに対して要求された拡張機能を作成できる最初のファクトリが見つかるまで、登録されているすべてのファクトリに対してQExtensionFactory::createExtension()を呼び出します。このファクトリがエクステンションのインスタンスを作成します。

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

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

QExtensionFactory およびQAbstractExtensionManagerも参照して ください。

メンバ関数 ドキュメント

[explicit] QExtensionManager::QExtensionManager(QObject *parent = nullptr)

与えられたparent で拡張機能マネージャーを構築します。

[virtual noexcept] QExtensionManager::~QExtensionManager()

拡張機能マネージャーを破棄します。

[override virtual] QObject *QExtensionManager::extension(QObject *object, const QString &iid) const

再実装します:QAbstractExtensionManager::extension(QObject *object, const QString &iid) const.

与えられたobject に対してiid で指定された拡張機能を返します。

[override virtual] void QExtensionManager::registerExtensions(QAbstractExtensionFactory *factory, const QString &iid = QString())

再実装:QAbstractExtensionManager::registerExtensions(QAbstractExtensionFactory *factory, const QString &iid)。

与えられたfactory と拡張機能識別子iid で指定された拡張機能を登録します。

[override virtual] void QExtensionManager::unregisterExtensions(QAbstractExtensionFactory *factory, const QString &iid = QString())

再実装:QAbstractExtensionManager::unregisterExtensions(QAbstractExtensionFactory *factory, const QString &iid)。

与えられたfactory と拡張機能識別子iid で指定された拡張機能の登録を解除します。

関連する非会員

template <typename T> T qt_extension(QAbstractExtensionManager *manager, QObject *object)

オブジェクトが T 型(またはサブクラス)の場合、与えられたobject を T 型にキャストした拡張機能を返します。そうでない場合は 0 を返します。拡張機能は、与えられた拡張機能manager を使用して取得されます。

       auto *manager = formEditor->extensionManager();

       auto *propertySheet = qt_extension<QDesignerPropertySheetExtension*>(manager, widget);

       if(propertySheet) {...}

カスタムウィジェットプラグインを実装する場合、Qt Widgets Designer の現在のQDesignerFormEditorInterface オブジェクト (formEditor) へのポインタは、QDesignerCustomWidgetInterface::initialize() 関数のパラメータで提供されます。

上の例のウィジェットにQDesignerPropertySheetExtension が定義されていない場合、propertySheet は null ポインタになります。

マクロ・ドキュメント

Q_DECLARE_EXTENSION_INTERFACE(ExtensionName, Identifier)

指定されたIdentifier (文字列リテラル) をExtensionName という拡張クラスに関連付けます。Identifier は一意でなければなりません。例えば

   Q_DECLARE_EXTENSION_INTERFACE(MyExtension, "com.mycompany.myproduct.myextension")

識別子の一意性を確保するには、会社名と商品名を使用するのがよい方法です。

カスタム拡張クラスを実装する場合は、Q_DECLARE_EXTENSION_INTERFACE() を使用してqt_extension() 関数を使用できるようにする必要があります。このマクロは通常、関連するヘッダー・ファイルのExtensionName のクラス定義の直後にあります。

Q_DECLARE_INTERFACE()も参照してください

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