Qt匿名信号

Qt anonymous signals

本文关键字:信号 Qt      更新时间:2023-10-16

是否可以将信号发送到插槽而不连接它们?有一个类,它有一个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对象?