このページでは

QExtensionManager Class

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

ヘッダー: #include <QExtensionManager>
CMake: find_package(Qt6 REQUIRED COMPONENTS Designer)
target_link_libraries(mytarget PRIVATE Qt6::Designer)
qmake: QT += designer
継承元:QObject および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 の拡張機能マネージャーへのインターフェースを取得できます。QDesignerCustomWidgetInterface::initialize()関数のパラメータには、Qt Widgets Designer の現在のQDesignerFormEditorInterface オブジェクト(上記の例ではformEditor )へのポインタが渡されます。カスタムウィジェットプラグインを実装する際は、QDesignerCustomWidgetInterface をサブクラス化し、Qt Widgets Designer に対してプラグインを公開する必要があります。

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

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

QExtensionManager クラスを使用した完全な例については、「タスクメニュー拡張機能」の例を参照してください。この例では、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)

指定されたobject を型Tにキャストした際の拡張部分を返します。ただし、オブジェクトが型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")

会社名や製品名を使用することは、識別子の一意性を確保するための有効な方法です。

カスタム拡張クラスを実装する際は、qt_extension() 関数の使用を有効にするために Q_DECLARE_EXTENSION_INTERFACE() を使用する必要があります。このマクロは通常、関連するヘッダーファイル内のExtensionName のクラス定義の直後に配置されます。

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

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