Ошибка 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, и поэтому может вызывать функции того объекта, который захватила.