Qt匿名信号
Qt anonymous signals
是否可以将信号发送到插槽而不连接它们?有一个类,它有一个SLOT,用来显示一些日志。现在我们还不知道有多少类将被用来向这个日志槽发送信号,我们也不能给它们的对象彼此指定地址,但是每个对象都可能发送日志请求。
可以像调用普通成员函数一样调用对象的(公共)槽。不需要连接
此外,您不需要事先知道谁将连接到给定的插槽。这种连接可以发生在您的类之外。(至少对于公共位置)
可以,在某些方面。
您可以像调用任何其他c++函数一样调用slot(如果它是public
)。槽仍然是c++函数。缺点是调用者需要在编译时知道接收者的接口。
logger.log("The frobnitz could not be quuxed");
您可以通过QMetaObject::invokeMethod
调用槽。使用这个方法,调用者不需要任何关于接收者的编译时信息,除了它是QObject*
这个事实。
if (!QMetaObject::invokeMethod(logger, "log", Q_ARG(QString, "The frobnitz could not be quuxed"))) {
qWarning("Internal error: logging failed (did someone change the logger API?)");
}
我认为没有这种可能性。但是也许你可以让log()方法静态,这样你就可以调用log()方法而不引用logger对象?
相关文章:
- Qt VTK交互风格的信号到小部件
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 如何在qt中将信号和插槽与另一个对象连接 --解决了
- Qt将信号与另一个类方法连接
- 通过插槽和信号在不同线程中的两个qt对象之间进行通信
- 控制带有信号/插槽的Qt QML滑动视图
- Qt 信号/插槽问题
- Qt信号和插槽如果从QRunnable或其他线程调用,则不起作用
- Qt:如何通知对象已建立涉及它的信号槽连接
- Qt/C++ 系统单元启动/停止时的信号
- C++Qt信号和插槽
- Qt moveToThread,带有参数的信号/插槽
- 如何在Qt测试框架中对信号进行基准测试?
- Qt - Q_PROPERTY的通知信号未发出有关成员更改的通知信号
- 当再次触发信号时,从Qt插槽执行的功能被第二次调用时会发生什么?
- 使用std::move将std::unique_ptr作为qt信号参数传递
- 使用std::bind将Qt信号连接到插槽
- Qt:向死/停止线程发送信号
- 呼叫函数直接与发射信号(QT-信号和插槽)
- 没有这样的插槽/信号(Qt)