QTConcurrent 不编译
QTConcurrent doesn't compile
我有一个递归目录复制功能,我想在后台 运行。该函数有两个 QString 参数,文件路径和目录。
来自.pro:
QT += core gui sql network concurrent
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
LIBS += -lQt5Concurrent
来自代码:
#include <QtConcurrent/QtConcurrent>
#include <qtconcurrentrun.h>
#include <QThread>
...
QFuture <void> future = QtConcurrent::run(copyFolder(filepath,dir));
我得到以下编译错误:
error: no matching function for call to 'run'
QFuture <void> future = QtConcurrent::run(copyFolder(filepath,dir) );
^~~~~~~~~~~~~~~~~
如果我这样调用函数:
QFuture <void> future = QtConcurrent::run(copyFolder, filepath,dir );
error: reference to non-static member function must be called
QFuture <void> future = QtConcurrent::run(copyFolder, filepath,dir );
^~~~~~~~~~
我做错了什么?
I get the following compile error:
error: no matching function for call to 'run'
QFuture <void> future = QtConcurrent::run(copyFolder(filepath,dir) );
^~~~~~~~~~~~~~~~~
你不应该像现在这样传递参数。相反,您应该将函数的参数作为参数传递给 QtConcurrent::run
,请参阅文档 here.
您的电话应如下所示:
QFuture <void> future = QtConcurrent::run(copyFolder, filepath, dir);
这样 QtConcurrent
将复制您传递的参数并在默认 QThreadPool
的线程中执行函数调用。
If I call the function like this:
QFuture <void> future = QtConcurrent::run(copyFolder, filepath,dir );
error: reference to non-static member function must be called
QFuture <void> future = QtConcurrent::run(copyFolder, filepath,dir );
^~~~~~~~~~
如果您必须在 class 中调用非静态成员函数,则必须将您想要的对象传递给 运行 函数,请参阅文档 here .假设您在 class 中使用来自另一个成员函数的 QtConcurrent::run
(因为如果不这样做,您会得到不同的错误),您应该这样做:
QFuture <void> future = QtConcurrent::run(this, &ClassName::copyFolder, filepath, dir);
请注意,您必须确保所有对共享数据的访问(在两个线程之间)都应该被序列化(可能使用 QMutex
)。
我有一个递归目录复制功能,我想在后台 运行。该函数有两个 QString 参数,文件路径和目录。
来自.pro:
QT += core gui sql network concurrent
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
LIBS += -lQt5Concurrent
来自代码:
#include <QtConcurrent/QtConcurrent>
#include <qtconcurrentrun.h>
#include <QThread>
...
QFuture <void> future = QtConcurrent::run(copyFolder(filepath,dir));
我得到以下编译错误:
error: no matching function for call to 'run'
QFuture <void> future = QtConcurrent::run(copyFolder(filepath,dir) );
^~~~~~~~~~~~~~~~~
如果我这样调用函数:
QFuture <void> future = QtConcurrent::run(copyFolder, filepath,dir );
error: reference to non-static member function must be called
QFuture <void> future = QtConcurrent::run(copyFolder, filepath,dir );
^~~~~~~~~~
我做错了什么?
I get the following compile error:
error: no matching function for call to 'run' QFuture <void> future = QtConcurrent::run(copyFolder(filepath,dir) ); ^~~~~~~~~~~~~~~~~
你不应该像现在这样传递参数。相反,您应该将函数的参数作为参数传递给 QtConcurrent::run
,请参阅文档 here.
您的电话应如下所示:
QFuture <void> future = QtConcurrent::run(copyFolder, filepath, dir);
这样 QtConcurrent
将复制您传递的参数并在默认 QThreadPool
的线程中执行函数调用。
If I call the function like this:
QFuture <void> future = QtConcurrent::run(copyFolder, filepath,dir ); error: reference to non-static member function must be called QFuture <void> future = QtConcurrent::run(copyFolder, filepath,dir ); ^~~~~~~~~~
如果您必须在 class 中调用非静态成员函数,则必须将您想要的对象传递给 运行 函数,请参阅文档 here .假设您在 class 中使用来自另一个成员函数的 QtConcurrent::run
(因为如果不这样做,您会得到不同的错误),您应该这样做:
QFuture <void> future = QtConcurrent::run(this, &ClassName::copyFolder, filepath, dir);
请注意,您必须确保所有对共享数据的访问(在两个线程之间)都应该被序列化(可能使用 QMutex
)。