QDesignerContainerExtension Class

QDesignerContainerExtension クラスを使用すると、Qt Widgets Designer のワークスペースのカスタム マルチページ コンテナにページを追加できます。詳細...

ヘッダー #include <QDesignerContainerExtension>
CMakeの find_package(Qt6 REQUIRED COMPONENTS Designer)
target_link_libraries(mytarget PRIVATE Qt6::Designer)
qmake: QT += designer

パブリック関数

virtual ~QDesignerContainerExtension()
virtual void addWidget(QWidget *page) = 0
virtual bool canAddWidget() const = 0
virtual bool canRemove(int index) const = 0
virtual int count() const = 0
virtual int currentIndex() const = 0
virtual void insertWidget(int index, QWidget *page) = 0
virtual void remove(int index) = 0
virtual void setCurrentIndex(int index) = 0
virtual QWidget *widget(int index) const = 0

詳細説明

QDesignerContainerExtensionは、カスタムコンテナ拡張を作成するためのインターフェイスを提供します。コンテナ拡張は、Qt Widgets Designer が複数ページのコンテナプラグインを管理するために必要な関数のコレクションと、コンテナのページのリストから構成されます。

警告 これは一般的なコンテナプラグイン用のエクステンションではなくカスタムマルチページコンテナ専用のエクステンションです。

コンテナ拡張機能を作成するには、拡張クラスをQObject と QDesignerContainerExtension の両方から継承する必要があります。例えば

class MyContainerExtension : public QObject,
       public QDesignerContainerExtension
{
    Q_OBJECT
    Q_INTERFACES(QDesignerContainerExtension)

public:
    MyContainerExtension(MyCustomWidget *widget,
                         QObject *parent = 0);
    int count() const;
    QWidget *widget(int index) const;
    int currentIndex() const;
    void setCurrentIndex(int index);
    void addWidget(QWidget *widget);
    void insertWidget(int index, QWidget *widget);
    void remove(int index);

private:
    MyCustomWidget *myWidget;
};

インターフェイスを実装しているので、Q_INTERFACES ()マクロを使用して、メタオブジェクトシステムにそれが通知されるようにする必要があります。これにより、Qt Widgets Designerはqobject_cast ()関数を使用して、QObject ポインタのみを使用してサポートされているインターフェイスをクエリできるようになります。

Qt Widgets Designer でカスタム マルチページ コンテナ ウィジェットを管理するには、いくつかの関数を再実装する必要があります: Qt Widgets Designerは、count ()を使用してコンテナ内のページ数を記録し、widget ()を使用してコンテナのページ・リストの指定されたインデックスにあるページを返し、currentIndex ()を使用して選択されたページのリスト・インデックスを返します。 Qt Widgets Designerでは、addWidget ()関数を使用して指定されたページをコンテナに追加し、ページのリストに追加されることを期待します。一方、insertWidget ()関数を使用して指定されたインデックスに挿入して指定されたページをコンテナに追加することを期待します。

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(QDesignerContainerExtension))
        return 0;

    if (MyCustomWidget *widget = qobject_cast<MyCustomWidget*>
           (object))
        return new MyContainerExtension(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(QDesignerTaskMenuExtension))) {
        return new MyTaskMenuExtension(widget, parent);

    } else if (widget && (iid == Q_TYPEID(QDesignerContainerExtension))) {
        return new MyContainerExtension(widget, parent);

    } else {
        return 0;
    }
}

QDesignerContainerExtensionクラスを使用した完全な例については、Container Extensionの例を参照してください。この例では、Qt Widgets Designer用のカスタムマルチページプラグインを作成する方法を示しています。

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

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

[virtual constexpr noexcept] QDesignerContainerExtension::~QDesignerContainerExtension()

エクステンションを破壊する。

[pure virtual] void QDesignerContainerExtension::addWidget(QWidget *page)

与えられたpage を拡張機能のページリストに追加してコンテナに追加する。

insertWidget(),remove(),widget()も参照

[pure virtual] bool QDesignerContainerExtension::canAddWidget() const

ウィジェットを追加できるかどうかを返します。これは、ページを追加または挿入するためのコンテキストメニューオプションが有効かどうかを決定します。

これは、例えばQScrollAreaQDockWidget のような、単一の固定ページを持つコンテナに対しては false を返すべきである。

addWidget() およびcanRemove()も参照してください

[pure virtual] bool QDesignerContainerExtension::canRemove(int index) const

与えられたindex のウィジェットを削除できるかどうかを返します。これは、現在のページを削除するコンテキストメニューオプションが有効かどうかを決定する。

これは、例えばQScrollAreaQDockWidget のような、単一の固定ページを持つコンテナに対しては false を返すべきである。

remove() およびcanAddWidget()も参照

[pure virtual] int QDesignerContainerExtension::count() const

コンテナ内のページ数を返す。

[pure virtual] int QDesignerContainerExtension::currentIndex() const

コンテナ内で現在選択されているページのインデックスを返します。

setCurrentIndex()も参照

[pure virtual] void QDesignerContainerExtension::insertWidget(int index, QWidget *page)

与えられたpage をコンテナに追加し、エクステンションのページリストの与えられたindex に挿入する。

addWidget(),remove(),widget()も参照

[pure virtual] void QDesignerContainerExtension::remove(int index)

与えられたindex のページを拡張機能のページリストから削除する。

addWidget() およびinsertWidget()も参照

[pure virtual] void QDesignerContainerExtension::setCurrentIndex(int index)

コンテナ内で現在選択されているページを、拡張機能のページ一覧で指定されたindex にあるページに設定します。

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

[pure virtual] QWidget *QDesignerContainerExtension::widget(int index) const

拡張モジュールのページ一覧で、指定したindex にあるページを返す。

addWidget() およびinsertWidget()も参照

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