QDesignerMemberSheetExtension Class
通过 QDesignerMemberSheetExtension 类,您可以使用Qt Widgets Designer 编辑信号和插槽的模式配置连接时显示的 widget 成员函数。更多
Header: | #include <QDesignerMemberSheetExtension> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Designer) target_link_libraries(mytarget PRIVATE Qt6::Designer) |
qmake: | QT += designer |
公共函数
virtual | ~QDesignerMemberSheetExtension() |
virtual int | count() const = 0 |
virtual QString | declaredInClass(int index) const = 0 |
virtual int | indexOf(const QString &name) const = 0 |
virtual bool | inheritedFromWidget(int index) const = 0 |
virtual bool | isSignal(int index) const = 0 |
virtual bool | isSlot(int index) const = 0 |
virtual bool | isVisible(int index) const = 0 |
virtual QString | memberGroup(int index) const = 0 |
virtual QString | memberName(int index) const = 0 |
virtual QList<QByteArray> | parameterNames(int index) const = 0 |
virtual QList<QByteArray> | parameterTypes(int index) const = 0 |
virtual void | setMemberGroup(int index, const QString &group) = 0 |
virtual void | setVisible(int index, bool visible) = 0 |
virtual QString | signature(int index) const = 0 |
详细说明
QDesignerMemberSheetExtension 是一个函数集合,通常用于查询 widget 的成员函数,以及在Qt Widgets Designer 的信号和插槽编辑模式下操作成员函数的外观。例如
QDesignerMemberSheetExtension *memberSheet = nullptr; QExtensionManager manager = formEditor->extensionManager(); memberSheet = qt_extension<QDesignerMemberSheetExtension*>(manager, widget); int index = memberSheet->indexOf(setEchoMode); memberSheet->setVisible(index, false); delete memberSheet;
在实现自定义 widget 插件时,Qt Widgets Designer 当前QDesignerFormEditorInterface 对象(上例中为formEditor
)的指针由QDesignerCustomWidgetInterface::initialize() 函数的参数提供。
通过使用qt_extension() 函数查询Qt Widgets Designer 的扩展管理器,可以获取成员表(以及任何其他扩展)。要释放扩展时,只需删除指针即可。
所有部件都有一个默认的成员表,可在Qt Widgets Designer'信号和插槽编辑模式下使用部件的成员函数。但 QDesignerMemberSheetExtension 也提供了创建自定义成员表扩展的接口。
警告: Qt Widgets Designer 使用 QDesignerMemberSheetExtension 来简化信号和插槽编辑模式。无论何时请求在两个部件之间建立连接,Qt Widgets Designer 都会查询部件的成员表扩展。如果一个部件有已实现的成员表扩展,该扩展将覆盖默认成员表。
要创建成员表扩展,扩展类必须同时继承自QObject 和 QDesignerMemberSheetExtension。然后,由于我们要实现一个接口,因此必须确保使用Q_INTERFACES() 宏将其告知元对象系统:
class MyMemberSheetExtension : public QObject, public QDesignerMemberSheetExtension { Q_OBJECT Q_INTERFACES(QDesignerMemberSheetExtension) 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 中有四种可用的扩展类型:QDesignerContainerExtension 、QDesignerMemberSheetExtension、QDesignerPropertySheetExtension 和QDesignerTaskMenuExtension 。无论请求的扩展是与多页面容器、成员表、属性表还是任务菜单相关联,Qt Widgets Designer 的行为都是一样的。
QExtensionFactory 类提供了一个标准扩展工厂,也可用作自定义扩展工厂的接口。您可以创建一个新的QExtensionFactory 并重新实现QExtensionFactory::createExtension() 函数。例如
QObject *ANewExtensionFactory::createExtension(QObject *object, const QString &iid, QObject *parent) const { if (iid != Q_TYPEID(QDesignerMemberSheetExtension)) return 0; if (MyCustomWidget *widget = qobject_cast<MyCustomWidget*> (object)) return new MyMemberSheetExtension(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(QDesignerMemberSheetExtension))) { return new MyMemberSheetExtension(widget, parent); } else { return 0; } }
有关使用扩展类的完整示例,请参阅任务菜单扩展示例。该示例展示了如何为Qt Designer 创建自定义 widget 插件,以及如何使用QDesignerTaskMenuExtension 类向Qt Widgets Designer 的任务菜单添加自定义项目。
另请参阅 QExtensionFactory,QExtensionManager, 以及创建自定义部件扩展。
成员函数文档
[virtual constexpr noexcept]
QDesignerMemberSheetExtension::~QDesignerMemberSheetExtension()
销毁成员表扩展名。
[pure virtual]
int QDesignerMemberSheetExtension::count() const
返回扩展的成员函数数。
[pure virtual]
QString QDesignerMemberSheetExtension::declaredInClass(int index) const
返回带有给定index 的成员函数所在类的名称。
另请参见 indexOf()。
[pure virtual]
int QDesignerMemberSheetExtension::indexOf(const QString &name) const
返回name 指定的成员函数的索引。
另请参见 memberName()。
[pure virtual]
bool QDesignerMemberSheetExtension::inheritedFromWidget(int index) const
如果index 的成员函数继承自QWidget ,则返回 true,否则返回 false。
另请参见 indexOf().
[pure virtual]
bool QDesignerMemberSheetExtension::isSignal(int index) const
如果给定index 的成员函数是信号,则返回 true,否则返回 false。
另请参见 indexOf().
[pure virtual]
bool QDesignerMemberSheetExtension::isSlot(int index) const
如果给定index 的成员函数是槽,则返回 true,否则返回 false。
另请参见 indexOf()。
[pure virtual]
bool QDesignerMemberSheetExtension::isVisible(int index) const
如果带有index 的成员函数在Qt Widgets Designer 的信号和槽编辑器中可见,则返回 true,否则返回 false。
另请参见 indexOf() 和setVisible()。
[pure virtual]
QString QDesignerMemberSheetExtension::memberGroup(int index) const
使用给定的index 返回为函数指定的成员组名称。
另请参阅 indexOf() 和setMemberGroup()。
[pure virtual]
QString QDesignerMemberSheetExtension::memberName(int index) const
返回给定index 的成员函数名称。
另请参阅 indexOf() 。
[pure virtual]
QList<QByteArray> QDesignerMemberSheetExtension::parameterNames(int index) const
以QByteArray 列表形式返回给定index 的成员函数的参数名。
另请参阅 indexOf() 和parameterTypes()。
[pure virtual]
QList<QByteArray> QDesignerMemberSheetExtension::parameterTypes(int index) const
以QByteArray 列表形式返回给定index 的成员函数的参数类型。
另请参阅 indexOf() 和parameterNames()。
[pure virtual]
void QDesignerMemberSheetExtension::setMemberGroup(int index, const QString &group)
将给定index, 的成员函数的成员组设置为group 。
另请参阅 indexOf() 和memberGroup()。
[pure virtual]
void QDesignerMemberSheetExtension::setVisible(int index, bool visible)
如果visible 为真,则在Qt Widgets Designer 的信号和槽编辑模式下,带有给定index 的成员函数可见;否则,该成员函数隐藏。
[pure virtual]
QString QDesignerMemberSheetExtension::signature(int index) const
返回带有给定index 的成员函数的签名。
另请参见 indexOf()。
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.