首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QTConcurrent不编译

QTConcurrent不编译
EN

Stack Overflow用户
提问于 2016-10-06 21:07:00
回答 1查看 4.5K关注 0票数 1

我有一个递归目录复制函数,我想在后台运行。函数接受两个QString参数,filepath和dir。

来自.pro:

代码语言:javascript
复制
QT += core gui sql network concurrent
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
LIBS += -lQt5Concurrent

来自代码:

代码语言:javascript
复制
#include <QtConcurrent/QtConcurrent>
#include <qtconcurrentrun.h>
#include <QThread>
...

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

我得到以下编译错误:

代码语言:javascript
复制
 error: no matching function for call to 'run'
 QFuture <void> future = QtConcurrent::run(copyFolder(filepath,dir) );
                  ^~~~~~~~~~~~~~~~~

如果我这样调用这个函数:

代码语言:javascript
复制
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 );
                            ^~~~~~~~~~

我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-06 21:25:27

我得到以下编译错误: 错误:对于调用“run”QFuture call = QtConcurrent::run(copyFolder(filepath,dir) )没有匹配函数;^

你不应该以你现在的方式传递论点。相反,您应该将函数的参数作为参数传递给QtConcurrent::run,请参阅docs 这里

你的电话应该是这样的:

代码语言:javascript
复制
QFuture <void> future = QtConcurrent::run(copyFolder, filepath, dir);

这样,QtConcurrent将复制您传递的参数,并在线程中从默认的QThreadPool执行函数调用。

如果我这样调用这个函数: QFuture未来= QtConcurrent::run(copyFolder,filepath,dir );错误:对非静态成员函数的引用必须被称为QFuture未来= QtConcurrent::run(copyFolder,filepath,dir );^~

如果必须在类中调用非静态成员函数,则必须传递要在其上运行的对象,请参阅docs 这里。假设您使用的是来自类中另一个成员函数的QtConcurrent::run (如果不是,您将得到一个不同的错误),您应该这样做:

代码语言:javascript
复制
QFuture <void> future = QtConcurrent::run(this, &ClassName::copyFolder, filepath, dir);

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39905638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档