0

我正在制作一个用于识别图像中车牌的应用程序。它工作正常,但现在我想将代码的图像分析部分移动到单独的线程。我正在使用 Qt 5.4。在阅读了文档后,我认为这QtConcurrent::map是正确的使用方法,因为在处理图像之前,用户会加载存储在列表中的文件(仅它们的名称)。这是一些代码:

应该在线程中运行的函数的定义:

results detectPlates(const QString &file);

尝试使用多线程:

QFuture<results> r = QtConcurrent::map(files, &MainWindow::detectPlates)

files被定义为QList<QString> results在我正在使用的库中定义的类型,如果这很重要的话。

这不会与错误一起编译:

C2440 'initializing' cannot convert from `QFuture<void>` to `QFuture<results>`

当我将函数修改为时,<void>我得到:

error c2064: term does not evaluate to a function taking 1 argument.

问题是什么?我将不胜感激任何帮助。

4

1 回答 1

2

QtConcurrent::map修改就地的项目,并返回一个无效的未来。如果要以 a 的形式返回结果,QFuture<T>则需要使用QtConcurrent::mapped.

于 2015-10-07T09:23:18.207 回答