カスタム ウィジェット拡張機能の作成
Qt Widgets Designer 用のカスタム ウィジェット プラグインを作成したら、カスタム ウィジェット拡張機能を使用して、Qt Widgets Designer のワークスペース内で期待される動作と機能を提供できます。
エクステンションの種類
Qt Widgets Designer では、いくつかの種類のエクステンションを使用できます。これらの拡張機能はすべて同じパターンで使用でき、それぞれの拡張機能ベースクラスを置き換えるだけです。
QDesignerContainerExtension は、カスタムマルチページコンテナを実装する場合に必要です。
![]() | QDesignerTaskMenuExtension QDesignerTaskMenuExtension はカスタムウィジェットに便利です。 Designer のタスクメニューにカスタムメニューエントリを追加できるエクステンションを提供します。Qt Widgets Task Menu Extension の例では、このクラスの使用方法を説明しています。 |
![]() | QDesignerContainerExtension QDesignerContainerExtension カスタムマルチページコンテナを実装する場合に必要です。 Designerのマルチページコンテナプラグインにページを追加および削除できるエクステンションを提供します。Qt Widgets Container Extension の例で、このクラスの使用方法をさらに説明します。 注意: 一部のウィジェット(QTabWidget など)については、実装方法の関係上、ページごとのカスタムプロパティを追加することはできません。 |
![]() | QDesignerMemberSheetExtension QDesignerMemberSheetExtension クラスを使用すると、シグナルとスロットの接続時に表示されるウィジェットのメンバ関数を操作できます。 |
![]() | QDesignerPropertySheetExtension,QDesignerDynamicPropertySheetExtension これらの拡張クラスを使用すると、Qt Widgets Designer のプロパティ・エディタでウィジェットのプロパティを表示する方法を制御できます。 |
Qt Widgets Designer は および クラスを使用して、プロパティおよびシグナルとスロットのエディタをフィードします。同様に、2 つのウィジェット間の接続が要求されると、 Designer はウィジェットのメンバ シート拡張を問い合わせます。QDesignerPropertySheetExtension QDesignerMemberSheetExtension Qt Widgets Qt Widgets
警告 すべてのウィジェットには、デフォルトのプロパティ・シートとメンバ・シートがあります。カスタムのプロパティ・シートまたはメンバ・シート拡張機能を実装する場合、カスタムの拡張機能はデフォルトのシートをオーバーライドします。
エクステンションの作成
エクステンションを作成するには、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 の Extension Manager へのアクセス
カスタムウィジェットプラグインを実装する場合、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 オブジェクトへのポインタです。QDesignerFormEditorInterface::extensionManager() 関数を使用して、Qt Widgets Designer の拡張機能マネージャへのインターフェイスを取得する必要があります。その後、QExtensionManager::registerExtensions ()関数を使用してカスタム拡張ファクトリを登録します。
関連例
Qt Widgets Designer でのカスタム ウィジェット拡張の作成については、Task Menu ExtensionおよびContainer Extensionの例を参照してください。
© 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.