【发布时间】:2011-04-17 19:40:08
【问题描述】:
是否可以在不连接信号的情况下将信号发送到插槽? 有一个类有一个显示一些日志的 SLOT。 目前我们没有任何信息将使用多少类来向这个日志槽发送信号,我们将无法相互寻址它们的对象,但每个对象都可能发送日志请求。
【问题讨论】:
是否可以在不连接信号的情况下将信号发送到插槽? 有一个类有一个显示一些日志的 SLOT。 目前我们没有任何信息将使用多少类来向这个日志槽发送信号,我们将无法相互寻址它们的对象,但每个对象都可能发送日志请求。
【问题讨论】:
您可以像调用普通成员函数一样调用对象的(公共)槽。不需要连接。
此外,您无需提前知道谁将连接到给定插槽。这种联系可能发生在你的课堂之外。 (至少对于公共时段。)
【讨论】:
是的,您可以通过几种方式。
您可以像调用任何其他 C++ 函数一样调用插槽(如果它是 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() 方法设为静态,这样你就可以在不引用 logger 对象的情况下调用 log() 方法?
【讨论】: