QT окно и потоки

Времени суток доброго. Столкнулся с проблемой, что при нажатии на кнопку и запуске цикла(долгосрочного) зависает полностью окно(оно и не мудрено). Вопрос состоит в чем, как в QT в объекте создать ОТДЕЛЬНЫЙ поток с функцией ЭТОГО же объекта?

std::thread thr(func);
thr.detach();

не работает.

QFuture <void> thr =  QtConcurrent::run(func);

не работает.

UPD Пример

Класс

class Human{
    String name;
    void singSong(){
        for(;;) cout << name << " : Lya lya lya" << endl;
    }
    void sing(){
        thread thr(singSong);
        thr.detach();
    }
}

Main

Human oleg = new Human();
Human vasya = new Human();
oleg.sing();
vasya.sing();

Нужно именно так! Никак иначе. Нужно чтобы функция(sing) создавала поток в котором будет ДРУГАЯ функция(singSong) крутиться, пока не закончится.

Хотелось бы , чтобы это так работало, но мне постоянно выдает невнятные варнинги и ошибки при компиляции.

Спасибо.


Ответы (1 шт):

Автор решения: Alexander Chernin

Надо правильно вызвать run:

class Human {
    String name;
public:
    void singSong() {
        for(;;) cout << name << " : Lya lya lya" << endl;
    }
    void sing(){
        // Здесь this - объект класса, в котором находится нужная функция
        QtConcurrent::run(this, &Human::singSong);
    }
};

Human human;
human.sing();

Не забудьте в файле pro подключить модуль QtConcurrent к проекту:

QT += concurrent
→ Ссылка