本页内容

QDesignerMemberSheetExtension Class

QDesignerMemberSheetExtension 类允许您操作小部件的成员函数,这些函数会在使用Qt Widgets Designer 的信号和槽编辑模式配置连接时显示。更多内容...

头文件: #include <QDesignerMemberSheetExtension>
CMake: find_package(Qt6 REQUIRED COMPONENTS Designer)
target_link_libraries(mytarget PRIVATE Qt6::Designer)
qmake: QT += designer

公共函数

QDesignerMemberSheetExtension()
QDesignerMemberSheetExtension(const QDesignerMemberSheetExtension &)
QDesignerMemberSheetExtension(QDesignerMemberSheetExtension &&)
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 &operator=(QDesignerMemberSheetExtension &&)
QDesignerMemberSheetExtension &operator=(const QDesignerMemberSheetExtension &)

详细说明

QDesignerMemberSheetExtension 是一组函数,通常用于查询小部件的成员函数,并在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;

在实现自定义控件插件时,QDesignerCustomWidgetInterface::initialize() 函数的参数会提供指向Qt Widgets Designer 当前QDesignerFormEditorInterface 对象的指针(如上例中的formEditor )。

可以通过调用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 创建自定义控件插件,以及如何使用QDesignerTaskMenuExtension 类向Qt Widgets Designer 的任务菜单中添加自定义项目。

另请参阅 QExtensionFactory 、QExtensionManager 以及《创建自定义小部件扩展》。

成员函数文档

[constexpr noexcept default] QDesignerMemberSheetExtension::QDesignerMemberSheetExtension()

默认——构造一个QDesignerMemberSheetExtension 实例。

[delete] QDesignerMemberSheetExtension::QDesignerMemberSheetExtension(const QDesignerMemberSheetExtension &)

复制并构造一个QDesignerMemberSheetExtension 实例。该函数已被删除。

[delete] QDesignerMemberSheetExtension::QDesignerMemberSheetExtension(QDesignerMemberSheetExtension &&)

通过移动构造一个QDesignerMemberSheetExtension 实例。该函数已被删除。

[virtual constexpr noexcept default] 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

返回具有给定index 的成员函数的参数名称,形式为QByteArray 列表。

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

[pure virtual] QList<QByteArray> QDesignerMemberSheetExtension::parameterTypes(int index) const

返回具有给定index 的成员函数的参数类型,形式为QByteArray 列表。

另请参阅 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 为真,则具有给定index 的成员函数在Qt Widgets Designer 的信号和插槽编辑模式中可见;否则该成员函数将被隐藏。

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

[pure virtual] QString QDesignerMemberSheetExtension::signature(int index) const

返回具有给定index 的成员函数的签名。

另请参阅 indexOf()。

[delete] QDesignerMemberSheetExtension &QDesignerMemberSheetExtension::operator=(QDesignerMemberSheetExtension &&)

将other 按移动赋值方式赋值给此QDesignerMemberSheetExtension 实例。该函数已被删除。

[delete] QDesignerMemberSheetExtension &QDesignerMemberSheetExtension::operator=(const QDesignerMemberSheetExtension &)

将other 复制并赋值给此QDesignerMemberSheetExtension 实例。此函数已被删除。

© 2026 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.