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 |
詳細説明
Qt Widgets Designer UI エディターのスクリーンショットで、現在のページの前にページを挿入するオプションをオブジェクトに表示しています。" src="images/containerextension-example.webp" title="Qt Widgets Designer UI エディターのスクリーンショットで、現在のページの前にページを挿入するオプションをオブジェクトに表示しています。"/>
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 のカスタムマルチページプラグインを作成する方法を示しています。
QExtensionFactory 、QExtensionManager 、およびカスタムウィジェット拡張機能の作成も参照してください 。
メンバ関数のドキュメント
[virtual constexpr noexcept] QDesignerContainerExtension::~QDesignerContainerExtension()
エクステンションを破壊する。
[pure virtual] void QDesignerContainerExtension::addWidget(QWidget *page)
与えられたpage を拡張機能のページリストに追加してコンテナに追加する。
insertWidget(),remove(),widget()も参照 。
[pure virtual] bool QDesignerContainerExtension::canAddWidget() const
ウィジェットを追加できるかどうかを返します。これは、ページを追加または挿入するためのコンテキストメニューオプションが有効かどうかを決定します。
これは、例えばQScrollArea やQDockWidget のような、単一の固定ページを持つコンテナに対しては false を返すべきである。
addWidget() およびcanRemove()も参照してください 。
[pure virtual] bool QDesignerContainerExtension::canRemove(int index) const
与えられたindex のウィジェットを削除できるかどうかを返します。これは、現在のページを削除するコンテキストメニューオプションが有効かどうかを決定する。
これは、例えばQScrollArea やQDockWidget のような、単一の固定ページを持つコンテナに対しては 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()も参照 。
© 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.