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 开始支持。