Yayin Story Studio logo Yayin Story Studio 项目文档
回到主页 用户手册

QtSSHelper Class

class Visindigo::Utility::QtSSHelper

此类提供了一些Qt信号槽相关的辅助函数。. 详情...

头文件: #include <QtSSHelper>
自以下版本: Visindigo 0.13.0

静态公开成员

(自 Visindigo 0.13.0 引入) void deepConnect(QObject *emiter, const QString &signalName, QObject *reciver, const QString &slotName, Qt::ConnectionType type = Qt::ConnectionType::AutoConnection)
(自 Visindigo 0.13.0 引入) QObject *findChildObject(QObject *obj, const QString &namePath)

详细说明

此类提供一些用于辅助Qt信号槽机制的静态函数。它们在处理嵌套对象路径和深度连接信号槽时特别有用。

特别需要注意的是,本类内所有深度访问均支持用"::"分隔的名称路径,以便访问嵌套对象。

成员函数文档

[static, since Visindigo 0.13.0] void QtSSHelper::deepConnect(QObject *emiter, const QString &signalName, QObject *reciver, const QString &slotName, Qt::ConnectionType type = Qt::ConnectionType::AutoConnection)

emiter 是信号发出者对象所属对象树的根对象。 signalName 是要连接的信号名称,支持用"::"分隔的嵌套路径。 reciver 是槽接收者对象所属对象树的根对象。 slotName 是要连接的槽名称,支持用"::"分隔的嵌套路径。 type 是连接类型,默认为自动连接。

此函数在嵌套对象中查找指定的信号和槽,并将它们连接起来。它支持通过"::"分隔的名称路径来访问嵌套对象。

不存在嵌套查找时,等同于使用SIGNAL和SLOT宏语法的QObject::connect调用。

因此该函数与双字符写法的QObject::connect具有相同缺陷,即信号和槽的参数类型无法被编译器检查。如果 不匹配,则只能在运行时发现错误。

注:在Visindigo中,四种connect写法一般只出现其中三种,即:

  • 1. 双字符写法的QObject::connect(emiter, SIGNAL(...), reciver, SLOT(...))
  • 2. 双函数指针写法的QObject::connect (emiter, &EmitterType::signal, reciver, &ReciverType::slot)
  • 3. Lambda写法的QObject::connect (emiter, &EmitterType::signal, [...](...) { ... })

还有一种写法是前函数指针,后Lambda(我们称为函子写法),即(emiter, &EmitterType::signal, context, [...](...) { ... }), Visindigo规范上拒绝该写法,因为不利于代码可读性。 与此同时,也只将Lambda写法限定为只操作本类本实例内部的对象,以避免代码可读性问题。

这个 function 从 Visindigo 0.13.0 开始支持。

[static, since Visindigo 0.13.0] QObject *QtSSHelper::findChildObject(QObject *obj, const QString &namePath)

obj 是要搜索其子对象的父对象。 namePath 是用"::"分隔的子对象名称路径。

此函数根据给定的名称路径在对象层次结构中查找子对象。找不到时返回 nullptr。

这个 function 从 Visindigo 0.13.0 开始支持。