QExtensionFactory Class

QExtensionFactory クラスを使用すると、Qt Designer でカスタム拡張機能のインスタンスを作成できるファクトリーを作成できます。詳細...

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

パブリック関数

QExtensionFactory(QExtensionManager *parent = nullptr)
QExtensionManager *extensionManager() const

再実装パブリック関数

virtual QObject *extension(QObject *object, const QString &iid) const override

保護された関数

virtual QObject *createExtension(QObject *object, const QString &iid, QObject *parent) const

詳細説明

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

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

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

新しい QExtensionFactory を作成し、QExtensionFactory::createExtension() 関数を再実装することができます。例えば

        QObject *ANewExtensionFactory::createExtension(QObject *object,
                const QString &iid, QObject *parent) const
        {
            if (iid != Q_TYPEID(QDesignerContainerExtension))
                return nullptr;

            if (auto *widget = qobject_cast<MyCustomWidget*>(object))
                return new MyContainerExtension(widget, parent);

            return nullptr;
        }

または、既存のファクトリーを使用し、QExtensionFactory::createExtension() 関数を拡張して、そのファクトリーで拡張機能を作成できるようにすることもできます。例えば

        QObject *AGeneralExtensionFactory::createExtension(QObject *object,
                const QString &iid, QObject *parent) const
        {
            auto *widget = qobject_cast<MyCustomWidget*>(object);
            if (!widget)
                return nullptr;

            if (iid == Q_TYPEID(QDesignerTaskMenuExtension))
                return new MyTaskMenuExtension(widget, parent);

            if (iid == Q_TYPEID(QDesignerContainerExtension))
                return new MyContainerExtension(widget, parent);

            return nullptr;
        }

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

QExtensionManager およびQAbstractExtensionFactoryも参照して ください。

メンバ関数 ドキュメント

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

与えられたparent で拡張ファクトリーを構築します。

[virtual protected] QObject *QExtensionFactory::createExtension(QObject *object, const QString &iid, QObject *parent) const

与えられたobject に対してiid で指定された拡張機能を作成します。エクステンションオブジェクトは、指定されたparent の子として作成されます。

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

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

再実装:QAbstractExtensionFactory::extension(QObject *object, const QString &iid) const.

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

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

QExtensionManager *QExtensionFactory::extensionManager() const

拡張機能ファクトリの拡張機能マネージャを返します。

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