Ошибка reference to non-static member funtionпри использовании QtConcurrent

Пытался понять каким образом Qt может обрабатывать данные без сигналов и слотов. Наткнулся на примеры с QtConcurrent, однако функции сделанные по примеру не работают. Я использовал следующий код:

extern int ping::doPing(QString ip){


       QString command = "ping";
       QStringList args;
       args << "-w" <<  "1" <<  ip;
       ping_process->start(command, args);
       ping_process->waitForStarted(100);

       ping_process->waitForFinished(100);
       QString out = ping_process->readAll();
       if(out.contains("ms"))
       {
           is_Avail = true;
       }
       return is_Avail;

};

void ping::startCommand(QString ip){
    if(ping_process){
        int result = 0;
        QFuture<int> future = QtConcurrent::run(doPing,ip);//reference to non-static member function must be called
        result = future.result();
    }
}

Как можно выполнить подобный код с использованием QtConcurrent?


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

Автор решения: maestro

Можете попробовать сделать лямбда-функцию:

QtConcurrent::run([this](QString ip){
    doPing(ip);
}, ip);

Если бы можно было передавать в QtConcurrent функцию-член класса, то хоть где-то должен был появиться указать this. Иначе непонятно, функцию какого экземпляра этого класса вызывать. Лямбда же не является членом класса, однако она захватывает указатель this, и поэтому может вызывать функции того объекта, который захватила.

→ Ссылка