class QDesignerPropertySheetExtension#

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

概述#

方法#

虚拟方法#

备注:

本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译中的问题,您也可以通过在https:/bugreports.qt.io/projects/PYSIDE创建一个工单来告诉我们。

详细说明链接到此处

警告:

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

QDesignerPropertySheetExtension提供了一组函数,通常用于查询窗口小部件的属性,并在属性编辑器中操纵属性的显示。例如

propertySheet = None
manager = formEditor.extensionManager()
propertySheet = qt_extension<QDesignerPropertySheetExtension*>(manager, widget)
index = propertySheet.indexOf("margin")
propertySheet.setProperty(index, 10)
propertySheet.setChanged(index, True)
del propertySheet

请注意,如果您使用 setProperty() 函数改变了属性的值,撤销栈将不会被更新。为了确保属性的值可以通过撤销栈来撤销,必须使用 setProperty() 函数,或者它的伙伴函数 setWidgetProperty()

在实现自定义小部件插件时,Qt Designer 当前 QDesignerFormEditorInterface 对象的指针(在上述示例中为 formEditor)由 initialize() 函数的参数提供。

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

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

请牢记以下限制

  • Qt Designer 使用 QDesignerPropertySheetExtension 来喂给属性编辑器。每次在其工作区中选择一个小部件时,Qt Designer 将查询小部件的属性表扩展。如果选中的小部件实现了属性表扩展,则该扩展将覆盖默认属性表。

  • 对于某些属性,属性表使用的数据类型是包含额外信息但不直接是 Qt 数据类型的自定义 QVariant 类型。例如,这是枚举、标志、图标、像素图和字符串的情况。

  • Qt Designer 的属性编辑器没有针对使用 Q_DECLARE_METATYPE() 声明的自定义类型的 Q_PROPERTY 类型的处理实现。

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

class MyPropertySheetExtension(QObject,
        public QDesignerPropertySheetExtension

    Q_OBJECT
    Q_INTERFACES(QDesignerPropertySheetExtension)
# public
    ...

这使得 Qt Designer 能够通过 qobject_cast() 使用一个 QObject 指针来查询支持的接口。

Qt Designer 中,扩展只能在需要时创建。因此,在实现属性表扩展时,您还需要创建一个 QExtensionFactory ,即一个能够创建你的扩展实例的类,并使用 Qt Designerextension manager 进行注册。

当需要属性表扩展时,Qt Designerextension manager 会遍历所有已注册的工厂,对每个调用 createExtension() 直到找到第一个能够为选定的小部件创建属性表扩展的工厂。然后,该工厂将创建扩展实例。如果没有找到这样的工厂,Qt Designer 将使用默认属性表。

Qt Designer 中有四种可用的扩展类型:QDesignerContainerExtensionQDesignerMemberSheetExtensionQDesignerPropertySheetExtensionQDesignerTaskMenuExtension 。无论请求的扩展是与多页容器、成员表、属性表还是任务菜单关联,Qt Designer 的行为都是相同的。

QExtensionFactory 类提供了一个标准的扩展工厂,也可以用作自定义扩展工厂的接口。你可以创建一个新的 QExtensionFactory 并重新实现 createExtension() 函数。例如

QObject ANewExtensionFactory.createExtension(QObject object,
        QString iid, QObject parent)

    if iid != Q_TYPEID(QDesignerPropertySheetExtension):
        return 0
    if (MyCustomWidget widget = qobject_cast<MyCustomWidget>
           (object))
        return MyPropertySheetExtension(widget, parent)
    return 0

或者,你可以使用现有的工厂,扩展 createExtension() 函数,使其能够创建属性表扩展。例如

QObject AGeneralExtensionFactory.createExtension(QObject object,
        QString iid, QObject parent)

    widget = MyCustomWidget(object)
    if widget and (iid == Q_TYPEID(QDesignerTaskMenuExtension)):
        return MyTaskMenuExtension(widget, parent)
     elif widget and (iid == Q_TYPEID(QDesignerPropertySheetExtension)):
        return MyPropertySheetExtension(widget, parent)
    else:
        return 0

关于使用扩展类的完整示例,请参阅 任务菜单扩展示例 。该示例展示了如何为 Qt Designer 创建自定义小部件插件,以及如何使用 QDesignerTaskMenuExtension 类向 Qt Designer 的任务菜单添加自定义项。

另请参阅

QDesignerDynamicPropertySheetExtension QExtensionFactory QExtensionManager 创建自定义小部件扩展

__init__()#
抽象 count()#
返回类型:

int

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

抽象 hasReset(index)#
参数:

index – int

返回类型:

bool

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

另请参阅

indexOf() reset()

抽象 indexOf(name)#
参数:

name – str

返回类型:

int

返回给定属性 name 的索引。

另请参阅

propertyName()

抽象 isAttribute(index)#
参数:

index – int

返回类型:

bool

如果给定 index 位置的属性是一个属性,该属性将被从 UI 文件中 排除,则返回 true,否则返回 false。

另请参阅

indexOf() setAttribute()

抽象 isChanged(index)#
参数:

index – int

返回类型:

bool

如果给定 index 位置上的属性值与其默认值不同,则返回 true,否则返回 false。

抽象 isEnabled(index)#
参数:

index – int

返回类型:

bool

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

另请参阅

indexOf()

抽象 isVisible(index)#
参数:

index – int

返回类型:

bool

如果指定的 indexQt Designer 的属性编辑器中可见,则返回 true,否则返回 false。

另请参阅

indexOf() setVisible()

抽象 property(index)#
参数:

index – int

返回类型:

对象

返回指定 index 的属性值。

抽象 propertyGroup(index)#
参数:

index – int

返回类型:

字符串

返回指定 index 的属性所属的组。

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

抽象 propertyName(index)#
参数:

index – int

返回类型:

字符串

返回指定 index 的属性名称。

另请参阅

indexOf()

抽象 reset(index)#
参数:

index – int

返回类型:

bool

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

abstract setAttribute(index, b)#
参数:
  • index – int

  • b – bool

如果 attribute 为真,则给定 index 的属性将成为一个属性,并将在 UI 文件中 排除;否则,它将被包含。

另请参阅

indexOf() isAttribute()

abstract setChanged(index, changed)#
参数:
  • index – int

  • changed – bool

根据 changed 参数设置给定 index 的属性是否与默认值不同。

另请参阅

indexOf() isChanged()

abstract setProperty(index, value)#
参数:
  • index – int

  • value – object

设置给定 index 的属性值。

警告:

如果您使用此函数更改属性的值,则不会更新撤销堆栈。为确保可以使用撤销堆栈回滚属性的值,您必须使用 setProperty() 函数或其配对函数 setWidgetProperty() 来替换。

abstract setPropertyGroup(index, group)#
参数:
  • index – int

  • group - 字符串

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

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

abstract setVisible(index, b)#
参数:
  • index – int

  • b – bool

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

另请参阅

indexOf() isVisible()