QDesignerPropertySheetExtension类
QDesignerPropertySheetExtension类允许您操作在Qt Designer属性编辑器中显示的小部件的属性。更多...
头文件 | #include <QDesignerPropertySheetExtension> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Designer) target_link_libraries(mytarget PRIVATE Qt6::Designer) |
qmake | QT += designer |
公共函数
虚拟 | ~QDesignerPropertySheetExtension() |
虚拟int | count() const = 0 |
虚拟bool | hasReset(int index) const = 0 |
虚拟int | indexOf(const QString &name) const = 0 |
虚拟bool | isAttribute(int index) const = 0 |
虚拟bool | isChanged(int index) const = 0 |
虚拟bool | isEnabled(int index) const = 0 |
虚拟bool | isVisible(int index) const = 0 |
虚拟QVariant | property(int index) const = 0 |
虚拟QString | propertyGroup(int index) const = 0 |
虚拟QString | propertyName(int index) const = 0 |
虚拟bool | reset(int index) = 0 |
虚拟void | setAttribute(int index, bool attribute) = 0 |
虚拟void | setChanged(int index, bool changed) = 0 |
虚拟void | setProperty(int index, const QVariant &value) = 0 |
虚拟void | setPropertyGroup(int index, const QString &group) = 0 |
虚拟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 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 Designer的extension manager注册它。
当需要属性表扩展时,Qt Designer的extension manager将运行其所有注册的工厂,调用QExtensionFactory::createExtension()直到找到第一个能够为所选小部件创建属性表扩展的工厂。这个工厂将创建扩展的实例。如果没有找到这样的工厂,Qt Designer将使用默认属性表。
Qt Designer中有四种可用的扩展类型: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 Designer 的任务菜单中添加自定义项。
另请参阅QDesignerDynamicPropertySheetExtension,QExtensionFactory,QExtensionManager,以及 创建自定义小部件扩展。
成员函数文档
[虚拟 constexpr noexcept]
QDesignerPropertySheetExtension::~QDesignerPropertySheetExtension()
销毁属性表扩展。
[纯虚]
int QDesignerPropertySheetExtension::count() const
返回选定小部件的属性数量。
[纯虚]
bool QDesignerPropertySheetExtension::hasReset(int index) const
如果指定的 index 中的属性在 Qt Designer 的属性编辑器中具有重置按钮,则返回 true,否则返回 false。
[纯虚]
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处属性是否与其默认值不同,或与之相同。
[纯虚函数]
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的属性编辑器中可见;否则属性将被隐藏。
© 2024 Qt公司。此处包含的文档贡献是各自所有者的版权。此处提供的文档是在GNU自由文档许可证版本1.3的条款下提供的,该许可证由自由软件基金会发布。Qt及其相关标志是芬兰以及/或全球其他国家的The Qt Company Ltd.的商标。所有其他商标均为其各自所有者的财产。