根据下面的代码,我得到以下错误:
fileio.cpp:47: C3867:“FileIO::read”:非标准语法;使用“&”创建指向成员的指针 fileio.cpp:47: error: C2780:'QFuture QtConcurrent::map(Iterator,Iterator,MapFunctor)':期望提供3个参数-2
为什么会这样呢?
fileio.h
#ifndef FILEIO_H
#define FILEIO_H
#include <QtCore>
class FileIO : public QObject
{
Q_OBJECT
Q_DISABLE_COPY(FileIO)
signals:
void finished();
public slots:
Q_INVOKABLE void cancel();
private:
void read(QString &fileURL);
public:
FileIO(QObject *parent = 0);
~FileIO();
Q_INVOKABLE void read_b64(const QString &fileURL);
};
#endif // FILEIO_Hfileio.cpp
#include "fileio.h"
#include <QFile>
#include <QDebug>
#include <QUrl>
#include <QThread>
#include <QtConcurrent>
FileIO::FileIO(QObject *parent)
: QObject(parent)
{
}
FileIO::~FileIO()
{
}
void FileIO::read(QString &filePath)
{
QByteArray finalBytes = QByteArray();
filePath = QUrl(filePath).toLocalFile();
QFile file(filePath);
qDebug() << "file size: " << file.size();
if (file.open(QIODevice::ReadOnly)) {
finalBytes = file.readAll();
}
qDebug() << "byte size: " << finalBytes.length();
//bytes.toBase64();
}
void FileIO::read_b64(const QString &filePath)
{
QFutureWatcher<void> futureWatcher;
QObject::connect(this, &FileIO::cancel, &futureWatcher, &QFutureWatcher<void>::cancel, Qt::UniqueConnection);
QObject::connect(&futureWatcher, &QFutureWatcher<void>::finished, this, &FileIO::finished);
QStringList filePaths;
filePaths << filePath;
QFuture<void> future = QtConcurrent::map(filePaths, this->read);
futureWatcher.setFuture(future);
}发布于 2016-04-21 15:39:02
this->read无效。您希望使用std::bind将非静态成员函数与实例绑定,创建一个可调用的,然后调用QtConcurrent::map的第一次重载,使用两个参数:
QFuture<void> future =
QtConcurrent::map(filePaths, std::bind(&FileIO::read, this));https://stackoverflow.com/questions/36774131
复制相似问题