Я наткнулся на проблему, которую не могу решить элегантным способом прямо сейчас.
Ситуация: у меня есть функция обратного вызова, которая вызывается извне моего приложения. Функция обратного вызова должна обновить некоторый объект графического интерфейса .. Так как я не могу вызвать (например) 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);
QMetaObject::invokeMethod
обычно это то, что вы должны использовать в такой ситуации. Удостоверься что:
object
подкласс QObject с макросом Q_OBJECT вверхуfunctionName
либо объявлен в разделе slots, либо содержит макрос Q_INVOKABLE