Qt анонимные сигналы - PullRequest
       20

Qt анонимные сигналы

0 голосов
/ 17 апреля 2011

Можно ли отправлять сигналы в слот, не подключая их?Есть класс, который имеет слот, который показывает некоторые журналы.На данный момент у нас нет никакой информации о том, сколько классов будет использоваться для отправки сигналов в этот слот журнала, и мы не сможем адресовать их объекты друг другу, но каждый объект может отправлять запрос на регистрацию.

Ответы [ 3 ]

4 голосов
/ 17 апреля 2011

Вы можете вызывать (открытый) слот объекта так же, как вы вызываете обычную функцию-член.Соединение не требуется.

Кроме того, вам не нужно заранее знать, кто будет подключаться к данному слоту.Связь может происходить за пределами вашего класса.(Для публичных слотов как минимум.)

3 голосов
/ 18 апреля 2011

Да, вы можете, несколькими способами.

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

Я думаю, что нет такой возможности.Но, возможно, вы можете просто сделать метод log () статическим, чтобы вы могли вызывать метод log () без ссылки на объект logger?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...