QDesignerPropertySheetExtension Class

QDesignerPropertySheetExtensionクラスを使用すると、Qt Designerのプロパティエディタに表示されるウィジェットのプロパティを操作することができます。詳細...

Header: #include <QDesignerPropertySheetExtension>
CMake: find_package(Qt6 REQUIRED COMPONENTS Designer)
target_link_libraries(mytarget PRIVATE Qt6::Designer)
qmake: QT += designer

パブリック関数

virtual ~QDesignerPropertySheetExtension()
virtual int count() const = 0
virtual bool hasReset(int index) const = 0
virtual int indexOf(const QString &name) const = 0
virtual bool isAttribute(int index) const = 0
virtual bool isChanged(int index) const = 0
virtual bool isEnabled(int index) const = 0
virtual bool isVisible(int index) const = 0
virtual QVariant property(int index) const = 0
virtual QString propertyGroup(int index) const = 0
virtual QString propertyName(int index) const = 0
virtual bool reset(int index) = 0
virtual void setAttribute(int index, bool attribute) = 0
virtual void setChanged(int index, bool changed) = 0
virtual void setProperty(int index, const QVariant &value) = 0
virtual void setPropertyGroup(int index, const QString &group) = 0
virtual void setVisible(int index, bool visible) = 0

詳細説明

QDesignerPropertySheetExtensionは、通常、ウィジェットのプロパティを照会したり、プロパティエディタでプロパティの外観を操作するために使用される関数のコレクションを提供します。例えば

QDesignerPropertySheetExtension *propertySheet = nullptr;
QExtensionManager manager = formEditor->extensionManager();

propertySheet = qt_extension<QDesignerPropertySheetExtension*>(manager, widget);
int index = propertySheet->indexOf(u"margin"_s);

propertySheet->setProperty(index, 10);
propertySheet->setChanged(index, true);

delete propertySheet;

QDesignerPropertySheetExtension::setProperty() 関数を使用してプロパティの値を変更した場合、元に戻すスタックは更新されないことに注意してください。元に戻すスタックを使用してプロパティの値を確実に元に戻すには、代わりにQDesignerFormWindowCursorInterface::setProperty() 関数またはそのバディであるsetWidgetProperty() を使用する必要があります。

カスタムウィジェットプラグインを実装する場合、Qt Widgets Designerの現在のQDesignerFormEditorInterface オブジェクト(上記の例ではformEditor )へのポインタは、QDesignerCustomWidgetInterface::initialize ()関数のパラメータで提供されます。

プロパティシートやその他の拡張機能は、qt_extension() 関数を使用して Qt Widgets Designer の拡張機能マネージャに問い合わせることで取得できます。拡張機能を解放したい場合は、ポインタを削除するだけです。

すべてのウィジェットにはデフォルトのプロパティ・シートがあり、Qt Widgets Designerのプロパティ・エディタにウィジェットのプロパティ(つまり、Q_PROPERTY ()マクロで定義されたプロパティ)を入力します。しかし、QDesignerPropertySheetExtensionは、カスタムプロパティシートの拡張を作成するためのインターフェイスも提供します。

以下の制限に注意してください:

  • Qt Widgets Designerは、QDesignerPropertySheetExtensionを使用してプロパティ・エディタをフィードします。ワークスペースでウィジェットが選択されると、Qt Widgets Designer はそのウィジェットのプロパティ・シート拡張を問い合わせます。選択されたウィジェットに実装されたプロパティシート拡張がある場合、この拡張はデフォルトのプロパティシートをオーバーライドします。
  • プロパティ・シートで使用されるデータ型は、Qt のデータ型ではなく、追加情報を含むQVariant の不透明なカスタム型です。例えば、列挙、フラグ、アイコン、ピクセルマップ、文字列がそうです。
  • Qt Widgets Designerのプロパティエディタには、Q_DECLARE_METATYPE()で宣言されたカスタム型のQ_PROPERTY 型を処理する実装がありません。

プロパティシート拡張を作成するには、拡張クラスはQObject と QDesignerPropertySheetExtension の両方を継承する必要があります。そして、インターフェイスを実装しているので、Q_INTERFACES()マクロを使用してメタ・オブジェクト・システムに確実に知らせる必要があります:

class MyPropertySheetExtension : public QObject,
        public QDesignerPropertySheetExtension
{
    Q_OBJECT
    Q_INTERFACES(QDesignerPropertySheetExtension)

public:
    ...
}

これにより、Qt Widgets Designer はqobject_cast() を使用して、QObject ポインタだけを使用してサポートされているインターフェイスを照会できます。

Qt Widgets Designerでは、拡張機能は必要になるまで作成されません。そのため、プロパティ・シート拡張機能を実装する場合は、QExtensionFactory 、つまり拡張機能のインスタンスを作成できるクラスを作成し、Qt Widgets Designerのextension manager を使用して登録する必要があります。

プロパティ・シート拡張が必要な場合、Qt Widgets Designer のextension manager は、選択されたウィジェットのプロパティ・シート拡張を作成できる最初のファクトリーが見つかるまで、登録されたすべてのファクトリーでQExtensionFactory::createExtension() を呼び出します。このファクトリは拡張機能のインスタンスを作成します。そのようなファクトリが見つからない場合、Qt Widgets Designer はデフォルトのプロパティシートを使用します。

Qt Widgets Designerで使用可能な拡張機能は4種類あります:QDesignerContainerExtension QDesignerMemberSheetExtension, QDesignerPropertySheetExtension およびQDesignerTaskMenuExtension 。Qt Designerの動作は、要求された拡張機能がマルチページコンテナ、メンバーシート、プロパティシート、タスクメニューのいずれに関連付けられていても同じです。

QExtensionFactory クラスは標準の拡張機能ファクトリを提供し、カスタム拡張機能ファクトリのインターフェイスとしても使用できます。新しいQExtensionFactory を作成し、QExtensionFactory::createExtension() 関数を再実装することができます。例えば

QObject *ANewExtensionFactory::createExtension(QObject *object,
        const QString &iid, QObject *parent) const
{
    if (iid != Q_TYPEID(QDesignerPropertySheetExtension))
        return 0;

    if (MyCustomWidget *widget = qobject_cast<MyCustomWidget*>
           (object))
        return new MyPropertySheetExtension(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(QDesignerPropertySheetExtension))) {
        return new MyPropertySheetExtension(widget, parent);

    } else {
        return 0;
    }
}

拡張クラスを使用した完全な例については、タスクメニュー拡張の例を参照してください。この例では、Qt Designer 用のカスタムウィジェットプラグインを作成する方法と、QDesignerTaskMenuExtension クラスを使用して Qt Widgets Designer のタスクメニューにカスタム項目を追加する方法を示します。

QDesignerDynamicPropertySheetExtension,QExtensionFactory,QExtensionManager,カスタムウィジェット拡張の作成も参照してください

メンバー関数 ドキュメント

[virtual constexpr noexcept] QDesignerPropertySheetExtension::~QDesignerPropertySheetExtension()

プロパティ・シート拡張機能を破棄します。

[pure virtual] int QDesignerPropertySheetExtension::count() const

選択されたウィジェットのプロパティ数を返します。

[pure virtual] bool QDesignerPropertySheetExtension::hasReset(int index) const

指定されたindex のプロパティが Qt Widgets Designer のプロパティ・エディタでリセット・ボタンを持つ場合は true を返し、そうでない場合は false を返します。

indexOf() およびreset()も参照してください

[pure virtual] int QDesignerPropertySheetExtension::indexOf(const QString &name) const

指定されたプロパティname のインデックスを返します。

propertyName()も参照して ください。

[pure virtual] bool QDesignerPropertySheetExtension::isAttribute(int index) const

指定されたindex のプロパティが UI ファイルから除外される属性である場合は true を返し、そうでない場合は false を返します。

indexOf() およびsetAttribute() も参照

[pure virtual] bool QDesignerPropertySheetExtension::isChanged(int index) const

指定されたindex にあるプロパティの値が、そのプロパティのデフォルト値と異なる場合は true を返し、そうでない場合は false を返します。

indexOf()、setChanged()、reset()参照。

[pure virtual] bool QDesignerPropertySheetExtension::isEnabled(int index) const

指定されたindex のプロパティが Qt Widgets Designer のプロパティ・エディタで有効になっている場合は true、そうでない場合は false を返します。

indexOf()も参照してください

[pure virtual] bool QDesignerPropertySheetExtension::isVisible(int index) const

指定されたindex のプロパティが Qt Widgets Designer のプロパティ・エディタで表示されている場合は true、そうでない場合は false を返します。

indexOf() およびsetVisible() も参照して ください。

[pure virtual] QVariant QDesignerPropertySheetExtension::property(int index) const

指定されたindex のプロパティの値を返します。

indexOf()、setProperty()、およびpropertyGroup() も参照して ください。

[pure virtual] QString QDesignerPropertySheetExtension::propertyGroup(int index) const

指定されたindex にあるプロパティのプロパティ・グループを返します。

Qt Widgets Designerのプロパティ・エディタは、プロパティ・グループ、つまり関連するプロパティのセクションをサポートしています。プロパティは、setPropertyGroup ()関数を使用してグループに関連付けることができます。プロパティのデフォルト・グループは、それを定義するクラスの名前です。例えば、QObject::objectName プロパティは、QObject プロパティ・グループ内に現れます。

indexOf() およびsetPropertyGroup()も参照して ください。

[pure virtual] QString QDesignerPropertySheetExtension::propertyName(int index) const

指定されたindex のプロパティの名前を返します。

indexOf()も参照して ください。

[pure virtual] bool QDesignerPropertySheetExtension::reset(int index)

指定されたindex のプロパティの値を既定値にリセットします。既定値が見つかれば true を返し、見つからなければ false を返します。

indexOf()、hasReset()、およびisChanged()も参照して ください。

[pure virtual] void QDesignerPropertySheetExtension::setAttribute(int index, bool attribute)

attribute が true の場合、与えられたindex のプロパティは、UI ファイルから除外される属性になります。

indexOf() およびisAttribute()も参照して ください。

[pure virtual] void QDesignerPropertySheetExtension::setChanged(int index, bool changed)

与えられたindex のプロパティがデフォルト値と異なるかどうかを、changed パラメータによって設定します。

indexOf() およびisChanged() も参照

[pure virtual] void QDesignerPropertySheetExtension::setProperty(int index, const QVariant &value)

指定されたindex のプロパティのvalue を設定します。

警告: この関数を使用してプロパティの値を変更した場合、取り消しスタックは更新されません。元に戻すスタックを使用してプロパティの値を確実に元に戻すには、代わりにQDesignerFormWindowCursorInterface::setProperty() 関数またはそのバディであるsetWidgetProperty() を使用する必要があります。

indexOf()、property()、propertyGroup()も参照して ください。

[pure virtual] void QDesignerPropertySheetExtension::setPropertyGroup(int index, const QString &group)

指定されたindex のプロパティのプロパティ・グループをgroup に設定します。

プロパティをグループに関連付けると、プロパティ・エディタでそのグループのセクション内に表示されるようになります。任意のプロパティのデフォルトのプロパティ・グループは、それを定義するクラスの名前です。例えば、QObject::objectName プロパティは、QObject プロパティ・グループ内に表示されます。

indexOf ()、property ()、propertyGroup)も参照して ください。

[pure virtual] void QDesignerPropertySheetExtension::setVisible(int index, bool visible)

visible が true の場合、指定されたindex のプロパティは Qt Widgets Designer のプロパティ・エディタで表示されます。

indexOf() およびisVisible()も参照してください

©2024 The Qt Company Ltd. ここに含まれるドキュメントの著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。