QDesignerCustomWidgetInterface Class
QDesignerCustomWidgetInterfaceクラスは、Qt Widgets Designerがカスタムウィジェットにアクセスし、構築できるようにします。詳細...
Header: | #include <QDesignerCustomWidgetInterface> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Designer) target_link_libraries(mytarget PRIVATE Qt6::Designer) |
qmake: | QT += designer |
パブリック関数
virtual | ~QDesignerCustomWidgetInterface() |
virtual QString | codeTemplate() const |
virtual QWidget * | createWidget(QWidget *parent) = 0 |
virtual QString | domXml() const |
virtual QString | group() const = 0 |
virtual QIcon | icon() const = 0 |
virtual QString | includeFile() const = 0 |
virtual void | initialize(QDesignerFormEditorInterface *formEditor) |
virtual bool | isContainer() const = 0 |
virtual bool | isInitialized() const |
virtual QString | name() const = 0 |
virtual QString | toolTip() const = 0 |
virtual QString | whatsThis() const = 0 |
マクロ
詳細説明
QDesignerCustomWidgetInterfaceは、インターフェイスを持つカスタムウィジェットを提供します。このクラスには、クラス名やヘッダー・ファイル名など、ウィジェットに関する基本情報を返すためにサブクラス化する必要がある一連の関数が含まれています。その他の関数は、プラグインがロードされたときに初期化し、Qt Widgets Designer が使用するカスタムウィジェットのインスタンスを作成するために実装する必要があります。
カスタムウィジェットを実装する場合、Qt Widgets Designerにウィジェットを公開するためにQDesignerCustomWidgetInterfaceをサブクラス化する必要があります。例えば、これはアナログ時計のカスタムウィジェットをQt Widgets Designerで使用できるようにするCustom Widget Pluginの例で使用したプラグインの宣言です:
class AnalogClockPlugin : public QObject, public QDesignerCustomWidgetInterface { Q_OBJECT Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QDesignerCustomWidgetInterface") Q_INTERFACES(QDesignerCustomWidgetInterface) public: explicit AnalogClockPlugin(QObject *parent = nullptr); bool isContainer() const override; bool isInitialized() const override; QIcon icon() const override; QString domXml() const override; QString group() const override; QString includeFile() const override; QString name() const override; QString toolTip() const override; QString whatsThis() const override; QWidget *createWidget(QWidget *parent) override; void initialize(QDesignerFormEditorInterface *core) override; private: bool initialized = false; };
クラス定義のうち、この特定のカスタムウィジェットに固有の部分はクラス名だけであることに注意してください。さらに、インターフェイスを実装しているため、Q_INTERFACES() マクロを使用してメタ・オブジェクト・システムに知らせる必要があります。これにより、Qt Widgets Designerはqobject_cast()関数を使用して、QObject ポインタのみを使用してサポートされているインターフェイスを問い合わせることができます。
Qt Widgets Designerがカスタムウィジェットプラグインをロードした後、インターフェースのinitialize ()関数を呼び出して、必要なリソースをセットアップできるようにします。この関数は、プラグインに Qt Widgets Designer のすべての API へのゲートウェイを提供するQDesignerFormEditorInterface パラメータと共に呼び出されます。
Qt Widgets Designerは、プラグインのcreateWidget ()関数を適切な親ウィジェットで呼び出すことで、カスタムウィジェットのインスタンスを構築します。プラグインは、指定された親ウィジェットでカスタムウィジェットのインスタンスを構築して返す必要があります。
Q_PLUGIN_METADATA() マクロを使用して、カスタムウィジェットプラグインを Qt Widgets Designer にエクスポートします。たとえば、libcustomwidgetplugin.so
(Unix) またはlibcustomwidget.dll
(Windows) というライブラリにMyCustomWidget
というウィジェット・クラスがある場合、プラグイン・ヘッダを含むファイルに次の行を追加することでエクスポートできます:
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QDesignerCustomWidgetInterface")
このマクロは、Qt Widgets Designerがカスタムウィジェットにアクセスして構築できるようにします。このマクロを使用しないと、Qt Widgets Designerはカスタムウィジェットを使用できません。
カスタムウィジェットプラグインを実装する場合、別のライブラリとして構築します。複数のカスタムウィジェットプラグインを同じライブラリに含める場合は、さらにQDesignerCustomWidgetCollectionInterface をサブクラス化する必要があります。
- QVariant::ByteArray
- QVariant::Bool
- QVariant::Color
- QVariant::Cursor
- QVariant::Date
- QVariant::DateTime
- QVariant::Double
- QVariant::Int
- QVariant::Point
- QVariant::Rect
- QVariant::Size
- QVariant::SizePolicy (サイズポリシー)
- QVariant::String
- QVariant::Time
- QVariant::UInt
QDesignerCustomWidgetInterfaceクラスを使用した完全な例については、カスタムウィジェットの例を参照してください。この例では、Qt Widgets Designer用のカスタムウィジェットプラグインを作成する方法を示します。
QDesignerCustomWidgetCollectionInterface およびQt Widgets Designer 用のカスタムウィジェットの作成も参照してください 。
メンバー関数 ドキュメント
[virtual constexpr noexcept]
QDesignerCustomWidgetInterface::~QDesignerCustomWidgetInterface()
カスタムウィジェットインターフェースを破棄します。
[virtual]
QString QDesignerCustomWidgetInterface::codeTemplate() const
この関数は、Qt Widgets Designer で将来使用するために予約されています。
[pure virtual]
QWidget *QDesignerCustomWidgetInterface::createWidget(QWidget *parent)
指定されたparent を持つカスタムウィジェットの新しいインスタンスを返します。
[virtual]
QString QDesignerCustomWidgetInterface::domXml() const
Qt Widgets Designer にカスタムウィジェットのプロパティを記述するために使用される XML を返します。
[pure virtual]
QString QDesignerCustomWidgetInterface::group() const
カスタムウィジェットが属するグループ名を返します。
[pure virtual]
QIcon QDesignerCustomWidgetInterface::icon() const
Qt Widgets Designer のウィジェットボックスでカスタムウィジェットを表すために使用されるアイコンを返します。
[pure virtual]
QString QDesignerCustomWidgetInterface::includeFile() const
カスタムウィジェットのコード作成時にuicが使用するインクルードファイルへのパスを返します。
[virtual]
void QDesignerCustomWidgetInterface::initialize(QDesignerFormEditorInterface *formEditor)
指定されたformEditor インターフェイスで使用するためにウィジェットを初期化します。
isInitialized()も参照してください 。
[pure virtual]
bool QDesignerCustomWidgetInterface::isContainer() const
カスタムウィジェットがコンテナとして使用される場合は true を返し、そうでない場合は false を返します。
ほとんどのカスタムウィジェットは、他のウィジェットを保持するために使用されないので、この関数の実装は false を返しますが、カスタムコンテナは、Qt Widgets Designer で正しく動作するように true を返します。
[virtual]
bool QDesignerCustomWidgetInterface::isInitialized() const
ウィジェットが初期化されていればtrueを返し、初期化されていなければfalseを返します。
initialize()も参照してください 。
[pure virtual]
QString QDesignerCustomWidgetInterface::name() const
インターフェースによって提供されたカスタムウィジェットのクラス名を返します。
返される名前は、カスタムウィジェットに使用されるクラス名と同じでなければなりません。
[pure virtual]
QString QDesignerCustomWidgetInterface::toolTip() const
Qt Widgets Designer がツールチップで使用できるウィジェットの短い説明を返します。
[pure virtual]
QString QDesignerCustomWidgetInterface::whatsThis() const
Qt Widgets Designerの "What's This? "ヘルプで使用できるウィジェットの説明を返します。
マクロの説明
QDESIGNER_WIDGET_EXPORT
このマクロは、カスタムウィジェットを定義するときに使用し、Qt Widgets Designer で使用するためにプラグインから正しくエクスポートされるようにします。
一部のプラットフォームでは、Qt Widgets Designer が新しいウィジェットを作成するために必要なシンボルがビルドシステムによってプラグインから削除され、使用できなくなります。このマクロを使用すると、それらのプラットフォームでシンボルが保持され、他のプラットフォームでは副作用がありません。
たとえば、カスタムウィジェット・プラグインの例では、以下の宣言でカスタムウィジェット・クラスをエクスポートします:
class QDESIGNER_WIDGET_EXPORT AnalogClock : public QWidget { Q_OBJECT ... };
Qt Widgets Designerのカスタムウィジェットの作成も参照してください 。
©2024 The Qt Company Ltd. 本書に含まれるドキュメントの著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。