我试图了解 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 执行这样的代码?
您可以尝试制作一个 lambda 函数:
如果可以将类成员函数传递给 QtConcurrent,那么至少它应该在某个地方显示这一点。否则,不清楚调用这个类的哪个实例的哪个函数。另一方面,lambda 不是类的成员,但它捕获 this 指针,因此可以调用它捕获的对象的函数。