QDesignerPropertySheetExtension类

QDesignerPropertySheetExtension类允许您操作在Qt Designer属性编辑器中显示的小部件的属性。更多...

头文件 #include <QDesignerPropertySheetExtension>
CMakefind_package(Qt6 REQUIRED COMPONENTS Designer)
target_link_libraries(mytarget PRIVATE Qt6::Designer)
qmakeQT += designer

公共函数

虚拟~QDesignerPropertySheetExtension()
虚拟intcount() const = 0
虚拟boolhasReset(int index) const = 0
虚拟intindexOf(const QString &name) const = 0
虚拟boolisAttribute(int index) const = 0
虚拟boolisChanged(int index) const = 0
虚拟boolisEnabled(int index) const = 0
虚拟boolisVisible(int index) const = 0
虚拟QVariantproperty(int index) const = 0
虚拟QStringpropertyGroup(int index) const = 0
虚拟QStringpropertyName(int index) const = 0
虚拟boolreset(int index) = 0
虚拟voidsetAttribute(int index, bool attribute) = 0
虚拟voidsetChanged(int index, bool changed) = 0
虚拟voidsetProperty(int index, const QVariant &value) = 0
虚拟voidsetPropertyGroup(int index, const QString &group) = 0
虚拟voidsetVisible(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 Designer当前QDesignerFormEditorInterface对象的指针(如上例中的formEditor)通过QDesignerCustomWidgetInterface::initialize()函数的参数提供。

可以通过查询Qt Designer的扩展管理器,使用qt_extension()函数来检索属性表或任何其他扩展。当您想要释放扩展时,您只需要删除指针。

所有小部件都有一个默认的属性表,它会将小部件的属性(即使用Q_PROPERTY()宏定义的属性)填充到Qt Designer的属性编辑器中。但QDesignerPropertySheetExtension还提供了一个用于创建自定义属性表扩展的接口。

请记住下面的限制:

  • Qt Designer使用QDesignerPropertySheetExtension为其属性编辑器提供数据。当在工作区中选择小部件时,Qt Designer会查询小部件的属性表扩展。如果所选小部件已实现属性表扩展,则该扩展将覆盖默认属性表。
  • 属性表用于某些属性的的数据类型是不透明的自定义QVariant类型,而不是普通的Qt数据类型,包含额外的信息。例如,枚举、标志、图标、像素图和字符串就是这种情况。
  • Qt Designer的属性编辑器没有实现用于处理使用Q_DECLARE_METATYPE()声明的自定义类型的Q_PROPERTY类型。

要创建属性表扩展,您的扩展类必须从QObject和QDesignerPropertySheetExtension继承。然后,因为我们正在实现一个接口,我们必须确保使用Q_INTERFACES()宏使其对元对象系统可见

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

public:
    ...
}

这允许Qt Designer使用qobject_cast()通过仅使用QObject指针来查询支持接口。

Qt Designer中,扩展只有在需要时才会创建。因此,当实现属性表扩展时,您还必须创建一个QExtensionFactory,即一个能够创建您的扩展实例的类,并使用Qt Designerextension manager注册它。

当需要属性表扩展时,Qt Designerextension manager将运行其所有注册的工厂,调用QExtensionFactory::createExtension()直到找到第一个能够为所选小部件创建属性表扩展的工厂。这个工厂将创建扩展的实例。如果没有找到这样的工厂,Qt Designer将使用默认属性表。

Qt Designer中有四种可用的扩展类型:QDesignerContainerExtensionQDesignerMemberSheetExtension、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 Designer 的任务菜单中添加自定义项。

另请参阅QDesignerDynamicPropertySheetExtensionQExtensionFactoryQExtensionManager,以及 创建自定义小部件扩展

成员函数文档

[虚拟 constexpr noexcept] QDesignerPropertySheetExtension::~QDesignerPropertySheetExtension()

销毁属性表扩展。

[纯虚] int QDesignerPropertySheetExtension::count() const

返回选定小部件的属性数量。

[纯虚] bool QDesignerPropertySheetExtension::hasReset(int index) const

如果指定的 index 中的属性在 Qt Designer 的属性编辑器中具有重置按钮,则返回 true,否则返回 false。

另请参阅indexOf() 和 reset()。

[纯虚] int QDesignerPropertySheetExtension::indexOf(const QString &name) const

返回给定属性 name 的索引。

另请参阅propertyName()。

[纯虚] bool QDesignerPropertySheetExtension::isAttribute(int index) const

如果指定 index 中的属性是属性,则返回 true(将 排除 在 UI 文件中),否则返回 false。

另请参阅indexOf() 和 setAttribute()。

[纯虚] bool QDesignerPropertySheetExtension::isChanged(int index) const

如果指定 index 中的属性值与默认值不同,则返回 true,否则返回 false。

另请参阅indexOf(),setChanged() 和 reset()。

[纯虚] bool QDesignerPropertySheetExtension::isEnabled(int index) const

如果指定 index 中的属性在 Qt Designer 的属性编辑器中启用,则返回 true,否则返回 false。

另请参阅indexOf()。

[纯虚函数] bool QDesignerPropertySheetExtension::isVisible(int index) const

如果给定的index处属性在Qt Designer属性编辑器中可见,则返回true,否则返回false。

另请参阅indexOf() 和 setVisible().

[纯虚函数] QVariant QDesignerPropertySheetExtension::property(int index) const

返回给定index处属性的值。

另请参阅indexOf(),setProperty() 和 propertyGroup().

[纯虚函数] QString QDesignerPropertySheetExtension::propertyGroup(int index) const

返回给定index处属性的属性组。

Qt Designer的属性编辑器支持属性组,即相关属性的分区。可以使用setPropertyGroup() 函数将属性与组相关联。任何属性的默认组都是定义它的类的名称。例如,QObject::objectName 属性出现在 QObject 属性组中。

另请参阅indexOf() 和 setPropertyGroup().

[纯虚函数] QString QDesignerPropertySheetExtension::propertyName(int index) const

返回给定index处属性的名称。

另请参阅indexOf()。

[纯虚函数] bool QDesignerPropertySheetExtension::reset(int index)

将给定index处属性的值重置为其默认值。如果能找到默认值,则返回true,否则返回false。

另请参阅indexOf(),hasReset() 和 isChanged().

[纯虚函数] void QDesignerPropertySheetExtension::setAttribute(int index, bool attribute)

如果attribute为true,将给定index处的属性设置为属性,该属性将被排除在UI文件之外;否则,它将被包含。

另请参阅indexOf() 和 isAttribute().

[纯虚函数] void QDesignerPropertySheetExtension::setChanged(int index, bool changed)

根据changed参数设置给定的index处属性是否与其默认值不同,或与之相同。

另请参阅indexOf() 和 isChanged().

[纯虚函数] void QDesignerPropertySheetExtension::setProperty(int index, const QVariant &value)

设置指定索引处的属性的值。

警告:如果您使用此函数更改属性的值,撤销栈将不会更新。为了确保属性的值可以通过撤销栈撤消,您必须使用QDesignerFormWindowCursorInterface::setProperty()函数,或其伙伴函数setWidgetProperty()。

另请参阅:indexOf(),property()和propertyGroup()。

[纯虚函数] void QDesignerPropertySheetExtension::setPropertyGroup(int index, const QString &group)

将指定索引处的属性的组设置为group

将属性与分组相关联将使其在属性编辑器中的该组部分中显示。任何属性的默认组是其定义它的类的名称。例如,QObject::objectName属性在QObject属性组中显示。

另请参阅:indexOf(),property()和propertyGroup()。

[纯虚函数] void QDesignerPropertySheetExtension::setVisible(int index, bool visible)

如果visible为true,则指定索引处的属性在Qt Designer的属性编辑器中可见;否则属性将被隐藏。

另请参阅:indexOf()和isVisible()。

© 2024 Qt公司。此处包含的文档贡献是各自所有者的版权。此处提供的文档是在GNU自由文档许可证版本1.3的条款下提供的,该许可证由自由软件基金会发布。Qt及其相关标志是芬兰以及/或全球其他国家的The Qt Company Ltd.的商标。所有其他商标均为其各自所有者的财产。