Das Problem ist, dass, wenn Sie einen Zeiger auf Member-Funktion verwenden, müssen Sie auch den this
Parameter bereitstellen (d. H. Das Objekt, auf dem die Member-Funktion aufgerufen werden sollte).
Die Syntax dafür ist ziemlich schwierig, wenn Sie es vorher nicht benutzt haben. Es könnte gut sein, http://www.parashift.com/c++-faq-lite/pointers-to-members.html zu lesen.
Angenommen, Sie haben eine Klasse Dog
und eine Funktion Dog::walkTheDog(int howlong_minutes)
. Dann sollten Sie in der Lage sein std::bind1st
und std::mem_fun
zu verwenden, um es für QtConcurrent::run
geeignet zu machen:
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)
gibt ein funktionsähnliche Objekt, das die Member-Funktion auf einen bestimmten Hund gebunden hat. Ab diesem Punkt können Sie es so verwenden, als könnten Sie eine eigenständige Funktion verwenden.
Beachten Sie, dass, während Sie ein Signal in einem Thread emittieren kann, entweder Methode verwenden, es Widgets nicht erstellt werden kann. Nur der Haupt-GUI-Thread darf. Außerdem wird der Haupt-GUI-Thread wahrscheinlich das Signal verarbeiten müssen. – CodeLurker