QDesignerMemberSheetExtension 类
QDesignerMemberSheetExtension 类使您能够操作在通过 Qt Designer 编辑信号和槽的模式配置连接时显示的小部件的成员函数。 更多...
头文件 | #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 是一组函数集合,通常用于查询小部件的成员函数,并在 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,QDesignerPropertySheetExtension和QDesignerTaskMenuExtension。Qt 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的任务菜单添加自定义项。
另请参阅:QExtensionFactory,QExtensionManager和创建自定义小部件扩展。
成员函数文档
[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。
另请参阅 indexOf 及 setVisible。
[纯虚函数]
QString QDesignerMemberSheetExtension::memberGroup(int index) const
返回为具有给定 index 的函数指定的成员组名称。
另请参阅 indexOf 及 setMemberGroup。
[纯虚函数]
QString QDesignerMemberSheetExtension::memberName(int index) const
返回具有给定 index 的成员函数的名称。
另请参阅indexOf。
[纯虚函数]
QList<QByteArray> QDesignerMemberSheetExtension::parameterNames(int index) const
返回具有给定 index 的成员函数的参数名称,作为 QByteArray 列表。
另请参阅 indexOf 及 parameterTypes。
[纯虚函数]
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的信号和槽编辑模式中可见;否则成员函数将被隐藏。
[纯虚函数]
QString QDesignerMemberSheetExtension::signature(int index) const
返回具有给定索引的成员函数的签名。
另请参阅indexOf。
© 2024 The Qt Company Ltd. 本文档中包含的文档贡献的版权归其各自的所有者。本提供的文档是根据自由软件基金会发布的GNU自由文档许可证版本1.3的条款许可的。Qt和相应的标志是The Qt Company Ltd在芬兰和/或其他国家的商标。所有其他商标均为其各自所有者的财产。