Qt добавить вызов функции в цикл обработки событий из другого потока

Я наткнулся на проблему, которую не могу решить элегантным способом прямо сейчас.
Ситуация: у меня есть функция обратного вызова, которая вызывается извне моего приложения. Функция обратного вызова должна обновить некоторый объект графического интерфейса .. Так как я не могу вызвать (например) repaint() из другого потока мне нужно найти какой-то способ добавить вызов функции в главный цикл обработки событий, чтобы задача выполнялась через некоторое время.

Одним из возможных способов было бы использовать это:

QMetaObject::invokeMethod(object, "functionName", Qt::QueuedConnection, Q_ARG(float, value));

Тем не менее, это просто дает мне ответ, что no such Method "Object::functionName", (что, очевидно, ложь!)

Я также читал о подключении сигнала к слоту, который будет вызываться из цикла обработки событий, установив тип подключения в Qt::QueuedConnection, Однако, используя QOjbect.:connect() не будет работать, так как я не знаю, какой объект должен получить сигнал. Ницца была бы что-то вроде

QObject::emit(object, SIGNAL(function(flaot)), arg);

3

Решение

QMetaObject::invokeMethod обычно это то, что вы должны использовать в такой ситуации. Удостоверься что:

  • object подкласс QObject с макросом Q_OBJECT вверху
  • functionName либо объявлен в разделе slots, либо содержит макрос Q_INVOKABLE
2

Другие решения


По вопросам рекламы [email protected]