カスタムウィジェット拡張機能の作成
Qt Widgets Designer 用のカスタムウィジェットプラグインを用意したら、カスタムウィジェット拡張機能を使用して、Qt Widgets Designer のワークスペース内で期待される動作や機能を実装することができます。
拡張機能の種類
Qt Widgets Designer では、いくつかの種類の拡張機能が利用可能です。これらの拡張機能はすべて、それぞれの拡張機能の基底クラスを置き換えるだけで、同じパターンで使用できます。
QDesignerContainerExtension は、カスタムマルチページコンテナを実装する際に必要です。
![]() | QDesignerTaskMenuExtension QDesignerTaskMenuExtension は、カスタムウィジェットに役立ちます。これは、Qt Widgets Designer のタスクメニューにカスタムメニュー項目を追加できる拡張機能を提供します。 「タスクメニュー拡張機能」の例では、このクラスの使用方法を説明しています。 |
![]() | QDesignerContainerExtension QDesignerContainerExtension これは、カスタムマルチページコンテナを実装する際に必要です。Qt Widgets Designer のマルチページコンテナプラグインに対して、ページの追加や削除を可能にする拡張機能を提供します。 「コンテナ拡張」の例では、このクラスの使用方法についてさらに詳しく説明しています。 注: 実装上の理由により、一部のウィジェット(例:QTabWidget )では、ページごとのカスタムプロパティを追加することはできません。 |
![]() | QDesignerMemberSheetExtension QDesignerMemberSheetExtension クラスを使用すると、シグナルとスロットを接続する際に表示されるウィジェットのメンバ関数を操作することができます。 |
![]() | QDesignerPropertySheetExtension,QDesignerDynamicPropertySheetExtension これらの拡張クラスを使用すると、Qt Widgets Designer のプロパティエディタにおけるウィジェットのプロパティの表示方法を制御できます。 |
Qt Widgets Designer は、QDesignerPropertySheetExtension およびQDesignerMemberSheetExtension クラスを使用して、プロパティエディタやシグナル・スロットエディタに情報を提供します。ワークスペース内でウィジェットが選択されるたびに、Qt Widgets Designer はそのウィジェットのプロパティシート拡張機能を照会します。同様に、2つのウィジェット間の接続が要求されるたびに、Qt Widgets Designer はそれらのウィジェットのメンバシート拡張機能を照会します。
警告:すべてのウィジェットには 、デフォルトのプロパティシートおよびメンバーシートが用意されています。カスタムプロパティシートまたはメンバーシート拡張機能を実装した場合、そのカスタム拡張機能がデフォルトのシートを上書きします。
拡張機能の作成
拡張機能を作成するには、QObject と適切な基底クラスの両方を継承し、その関数を再実装する必要があります。インターフェースを実装しているため、拡張クラスの定義内でQ_INTERFACES() マクロを使用して、そのインターフェースがメタオブジェクトシステムに認識されるようにする必要があります。例:
class MyExtension: public QObject,
public QDesignerContainerExtension
{
Q_OBJECT
Q_INTERFACE(QDesignerContainerExtension)
...
}これにより、Qt Widgets Designer はqobject_cast()関数を使用して、QObject ポインタのみを用いてサポートされているインターフェースを照会できるようになります。
拡張機能を公開するQt Widgets Designer
Qt Widgets Designer では、拡張機能は必要とされるまで作成されません。このため、拡張機能を実装する際には、QExtensionFactory をサブクラス化して、拡張機能のインスタンスを作成できるクラスを作成する必要があります。また、Qt Widgets Designer の拡張機能マネージャーにファクトリを登録する必要があります。拡張機能マネージャーが拡張機能の構築を処理します。
拡張機能が要求されると、Qt Widgets Designer の拡張機能マネージャーは、登録されたファクトリーを順に処理し、選択されたウィジェットに対して要求された拡張機能を作成できるファクトリーが見つかるまで、各ファクトリーに対してQExtensionFactory::createExtension()を呼び出します。その後、そのファクトリーが拡張機能のインスタンスを作成します。

拡張機能ファクトリの作成
QExtensionFactory クラスは標準の拡張機能ファクトリを提供しますが、カスタム拡張機能ファクトリのインターフェースとしても使用できます。
その目的は、QExtensionFactory::createExtension() 関数を再実装し、MultiPageWidgetコンテナ拡張機能など、独自の拡張機能を作成できるようにすることです。
新しい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;
}
}Qt Widgets Designer の拡張機能マネージャーへのアクセス
カスタムウィジェットプラグインを実装する際は、QDesignerCustomWidgetInterface をサブクラス化して、プラグインをQt Widgets Designer に公開する必要があります。これについては、「 Qt Widgets Designer 用のカスタムウィジェットの作成」セクションで詳しく説明しています。拡張機能ファクトリの登録は、通常、QDesignerCustomWidgetInterface::initialize() 関数内で行われます:
void MyPlugin::initialize(QDesignerFormEditorInterface *formEditor)
{
if (initialized)
return;
QExtensionManager *manager = formEditor->extensionManager();
Q_ASSERT(manager != 0);
manager->registerExtensions(new MyExtensionFactory(manager),
Q_TYPEID(QDesignerTaskMenuExtension));
initialized = true;
}QDesignerCustomWidgetInterface::initialize() 関数内のformEditor パラメータは、Qt Widgets Designer の現在のQDesignerFormEditorInterface オブジェクトへのポインタです。Qt Widgets Designer の拡張機能マネージャーへのインターフェースを取得するには、QDesignerFormEditorInterface::extensionManager() 関数を使用する必要があります。その後、QExtensionManager::registerExtensions() 関数を使用して、カスタム拡張機能ファクトリを登録します。
関連する例
Qt Widgets Designer でのカスタムウィジェット拡張の作成に関する詳細については、「タスクメニュー拡張」および「コンテナ拡張」の例を参照してください。
© 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.



