QDesignerMemberSheetExtension 类

QDesignerMemberSheetExtension 类使您能够操作在通过 Qt Designer 编辑信号和槽的模式配置连接时显示的小部件的成员函数。 更多...

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

公共函数

virtual~QDesignerMemberSheetExtension()
virtual intcount() const = 0
virtual QStringdeclaredInClass(int index) const = 0
virtual intindexOf(const QString &name) const = 0
virtual boolinheritedFromWidget(int index) const = 0
virtual boolisSignal(int index) const = 0
virtual boolisSlot(int index) const = 0
virtual boolisVisible(int index) const = 0
virtual QStringmemberGroup(int index) const = 0
virtual QStringmemberName(int index) const = 0
virtual QList<QByteArray>parameterNames(int index) const = 0
virtual QList<QByteArray>parameterTypes(int index) const = 0
virtual voidsetMemberGroup(int index, const QString &group) = 0
virtual voidsetVisible(int index, bool visible) = 0
virtual QStringsignature(int index) const = 0

详细描述

QDesignerMemberSheetExtension 是一组函数集合,通常用于查询小部件的成员函数,并在 Qt 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 Designer 当前 QDesignerFormEditorInterface 对象的指针(例如上例中的 formEditor)。

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

所有小部件都有一个默认的成员表,用于在 Qt Designer 的信号和槽编辑模式下使用小部件的成员函数。但 QDesignerMemberSheetExtension 还提供了一个接口来创建自定义成员表扩展。

警告:Qt Designer使用QDesignerMemberSheetExtension来简化信号和槽的编辑模式。每当请求两个小部件之间的连接时,Qt Designer将查询小部件的成员表扩展。如果一个部件实现了成员表扩展,则此扩展将覆盖默认的成员表。

要创建一个成员表扩展,您的扩展类必须继承自QObject和QDesignerMemberSheetExtension。由于我们正在实现一个接口,我们必须确保使用Q_INTERFACES() 宏将其告知元对象系统

class MyMemberSheetExtension : public QObject,
        public QDesignerMemberSheetExtension
{
    Q_OBJECT
    Q_INTERFACES(QDesignerMemberSheetExtension)

public:
    ...
}

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

Qt Designer中,扩展仅在需要时创建。因此,在实现成员表扩展时,您还必须创建一个QExtensionFactory,即能够实例化您的扩展并使用Qt Designer扩展管理器注册的类。

当需要部件的成员表扩展时,Qt Designer的扩展管理器将遍历所有注册的工厂,调用每个工厂的QExtensionFactory::createExtension(),直到找到第一个能够为该部件创建成员表扩展的工厂。然后,此工厂将创建扩展的实例。如果没有找到这样的工厂,Qt Designer将使用默认的成员表。

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

另请参阅:QExtensionFactoryQExtensionManager创建自定义小部件扩展

成员函数文档

[virtual constexpr noexcept] QDesignerMemberSheetExtension::~QDesignerMemberSheetExtension()

销毁成员表扩展。

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

返回扩展的成员函数数量。

[纯虚函数] QString QDesignerMemberSheetExtension::declaredInClass(int index) const

返回声明具有给定 index 的成员函数的类的名称。

另请参阅indexOf

[纯虚函数] int QDesignerMemberSheetExtension::indexOf(const QString &name) const

返回指定 name 的成员函数的索引。

另请参阅memberName

[纯虚函数] bool QDesignerMemberSheetExtension::inheritedFromWidget(int index) const

如果给定的 index 的成员函数是从 QWidget 继承的,则返回 true,否则返回 false。

另请参阅indexOf

[纯虚函数] bool QDesignerMemberSheetExtension::isSignal(int index) const

如果给定的 index 的成员函数是一个信号,则返回 true,否则返回 false。

另请参阅indexOf

[纯虚函数] bool QDesignerMemberSheetExtension::isSlot(int index) const

如果给定的 index 的成员函数是一个槽,则返回 true,否则返回 false。

另请参阅indexOf

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

如果给定的 index 的成员函数在 Qt Designer 的信号和槽编辑器中可见,则返回 true,否则返回 false。

另请参阅 indexOfsetVisible

[纯虚函数] QString QDesignerMemberSheetExtension::memberGroup(int index) const

返回为具有给定 index 的函数指定的成员组名称。

另请参阅 indexOfsetMemberGroup

[纯虚函数] QString QDesignerMemberSheetExtension::memberName(int index) const

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

另请参阅indexOf

[纯虚函数] QList<QByteArray> QDesignerMemberSheetExtension::parameterNames(int index) const

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

另请参阅 indexOfparameterTypes

[纯虚函数] QList<QByteArray> QDesignerMemberSheetExtension::parameterTypes(int index) const

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

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

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

将具有给定索引的成员函数的成员组设置为group

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

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

如果visible为true,则给定索引的成员函数在Qt Designer的信号和槽编辑模式中可见;否则成员函数将被隐藏。

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

[纯虚函数] QString QDesignerMemberSheetExtension::signature(int index) const

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

另请参阅indexOf

© 2024 The Qt Company Ltd. 本文档中包含的文档贡献的版权归其各自的所有者。本提供的文档是根据自由软件基金会发布的GNU自由文档许可证版本1.3的条款许可的。Qt和相应的标志是The Qt Company Ltd在芬兰和/或其他国家的商标。所有其他商标均为其各自所有者的财产。