Предположим, есть класс
class X: public QObject {
public slots:
void slotX(int x);
};
QMetaObject::invokeMethod(this, "slotX",
Qt::QueuedConnection, Q_ARG(int, 123));
Ужасный и неудобный синтаксис, однако.
Вместо этого можно создать таймер с нулевым временем ожидания, который сразу же отправит сигнал в очередь сигналов:
QTimer::singleShot(0, [this]() {
slotX(123);
});
или
QTimer::singleShot(0, this, [this]() {
slotX(123);
});
Мы тут обошлись вообще без слотов.
Здесь добавленный параметр this - т.н. "контекст", Для контроля существования объекта - получателя (в данном случае объекта this), сие особенно полезно при передаче сигналов между нитями. Если контекст получателя не существует, сообщение даже не будет поставлено в очередь.
Напомню, что если нить объекта контекста не совпадает с нитью эмиттера сигнала, такой сигнал будет поставлен в очередь объекта нити-приемника.
Комментариев нет:
Отправить комментарий