Проблема заключается в том, что при использовании указателя на функцию-член вам необходимо как-то предоставить параметр this
(т. Е. Объект, на который должна быть вызвана функция-член).
Синтаксис для этого довольно сложно, если вы его раньше не использовали. Может быть полезно прочитать http://www.parashift.com/c++-faq-lite/pointers-to-members.html.
Скажите, что у вас есть класс Dog
и функция Dog::walkTheDog(int howlong_minutes)
. Тогда вы должны быть в состоянии использовать std::bind1st
и std::mem_fun
, чтобы сделать его пригодным для QtConcurrent::run
:
Dog dog;
// Walk this dog for 30 minutes
QtConcurrent::run(std::bind1st(std::mem_fun(&Dog::walkTheDog), &dog), 30);
std::bind1st(std::mem_fun(&Dog::walkTheDog), &dog)
возвращает функцию, как объект, который связал функции члена к конкретной собаки. С этого момента вы можете использовать его так же, как вы могли бы использовать автономную функцию.
Обратите внимание, что в то время как вы можете излучать сигнал в потоке, используя любой метод, он не может создавать виджеты. Только основной поток GUI может. Кроме того, основной поток GUI, вероятно, потребуется обработать сигнал. – CodeLurker