Это не сработает, потому что вы создаете новый Foo каждый раз, когда вы входите в эту статическую функцию, и вы не подключаете сигнал к слоту.
Итак, исправление должно было бы пройтиобъект этой функции:
class Foo
{
signals:
emitFunction(int);
private:
static int callback(int val, Foo &foo)
{
/* Called multiple times (100+) */
foo.emitFunction(val);
}
void run()
{
callback(percentdownloaded, *this);
}
};
Другой вариант - использовать postEvent , но я бы не рекомендовал его.
Так как вы не можете изменитьподпись обратного вызова, вы можете сделать это так:
class Foo
{
signals:
emitFunction(int);
private:
static int callback(int val)
{
/* Called multiple times (100+) */
theFoo->emitFunction(val);
}
static Foo *theFoo;
void run()
{
callback(percentdownloaded, *this);
}
};
, но вам придется где-то инициализировать эту статическую переменную.