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 |
パブリック関数
| QDesignerContainerExtension() | |
| QDesignerContainerExtension(const QDesignerContainerExtension &) | |
| QDesignerContainerExtension(QDesignerContainerExtension &&) | |
| 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 & | operator=(QDesignerContainerExtension &&) |
| QDesignerContainerExtension & | operator=(const QDesignerContainerExtension &) |
詳細な説明
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 では、QDesignerContainerExtension、QDesignerMemberSheetExtension 、QDesignerPropertySheetExtension 、QDesignerTaskMenuExtension の4種類の拡張が利用可能です。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 クラスを使用した完全な例については、「コンテナ拡張」の例を参照してください。この例では、Qt Widgets Designer 用のカスタムマルチページプラグインを作成する方法を示しています。
「 QExtensionFactory」 、「QExtensionManager 」、および「カスタムウィジェット拡張機能の作成」も参照してください 。
メンバ関数のドキュメント
[constexpr noexcept default] QDesignerContainerExtension::QDesignerContainerExtension()
QDesignerContainerExtension のインスタンスをデフォルトコンストラクタで生成します。
[delete] QDesignerContainerExtension::QDesignerContainerExtension(const QDesignerContainerExtension &)
QDesignerContainerExtension のインスタンスをコピーして生成します。この関数は削除されています。
[delete] QDesignerContainerExtension::QDesignerContainerExtension(QDesignerContainerExtension &&)
QDesignerContainerExtension のインスタンスをMoveコンストラクタで生成します。この関数は削除されています。
[virtual constexpr noexcept default] 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()も参照してください 。
[delete] QDesignerContainerExtension &QDesignerContainerExtension::operator=(QDesignerContainerExtension &&)
other をこのQDesignerContainerExtension インスタンスに割り当てます。この関数は削除されます。
[delete] QDesignerContainerExtension &QDesignerContainerExtension::operator=(const QDesignerContainerExtension &)
other をこのQDesignerContainerExtension インスタンスにコピー代入します。この関数は削除されます。
© 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.