Problem polega na tym, że podczas używania wskaźnika do funkcji elementu należy również podać parametr this
(tj. Obiekt, na którym powinna zostać wywołana funkcja składowa).
Składnia tego jest dość trudna, jeśli wcześniej jej nie używałeś. Dobrze byłoby przeczytać http://www.parashift.com/c++-faq-lite/pointers-to-members.html.
Załóżmy, że masz klasę Dog
i funkcję Dog::walkTheDog(int howlong_minutes)
. Następnie powinieneś być w stanie korzystać std::bind1st
i std::mem_fun
, aby nadawał się do 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)
zwraca obiekt funkcji podobny który związał funkcji użytkownika do konkretnego psa. Od tego momentu możesz go używać tak, jakbyś mógł używać funkcji samodzielnej.
Należy zauważyć, że jednocześnie może emitować sygnał w wątku, przy użyciu metody, nie może tworzyć widgety. Może to być tylko główny wątek GUI. Ponadto główny wątek GUI prawdopodobnie będzie musiał przetworzyć sygnał. – CodeLurker