QDesignerContainerExtension Class

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

Header: #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用のカスタムマルチページプラグインを作成する方法を示しています。

QExtensionFactoryQExtensionManagerCreating Custom Widget Extensionsも参照してください

メンバ関数 ドキュメント

[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() も参照して ください。

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