Да, вы можете, несколькими способами.
Вы можете вызывать слот как любую другую функцию 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?)");
}