gpt4 book ai didi

c++ - QTConcurrent 不编译

转载 作者:行者123 更新时间:2023-11-30 01:42:14 27 4
gpt4 key购买 nike

我有一个递归目录复制功能,我想在后台运行。该函数有两个 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 );
^~~~~~~~~~

如果必须在类中调用非静态成员函数,则必须传递要在其上运行该函数的对象,请参阅文档 here .假设您正在使用类中另一个成员函数的 QtConcurrent::run(因为如果不这样做,您会得到不同的错误),您应该这样做:

QFuture <void> future = QtConcurrent::run(this, &ClassName::copyFolder, filepath, dir);

请注意,您必须确保所有对共享数据的访问(在两个线程之间)都应该被序列化(可能使用QMutex)。

关于c++ - QTConcurrent 不编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39905638/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com