繁体   English   中英

如何在QByteArray上使用QtConcurrent进行qCompress?

[英]How to use QtConcurrent to qCompress on QByteArray?

我想编写一个小程序,使用QByteArray的qCompress压缩目录中的所有文件。

但是我想通过使用QtConcurrent在多线程环境上运行压缩。 但是我有一些问题。

这是我的代码:

FilePool pool(folder,suffix);
QFutureWatcher<QString> watcher;
QProgressDialog progressDialog;


connect(&watcher,SIGNAL(progressRangeChanged(int,int)),&progressDialog,SLOT(setRange(int,int)));

connect(&watcher,SIGNAL(progressValueChanged(int)),&progressDialog,SLOT(setValue(int)));

connect(&progressDialog,SIGNAL(canceled()),&watcher,SLOT(cancel()));

QFuture<QString> future = QtConcurrent::filtered(pool,FindInFile(search));
QString text;

watcher.setFuture(future);

progressDialog.exec();

future.waitForFinished();
//Test for compressing file

QFile outFile("testCompress.ecf");
outFile.open(QIODevice::WriteOnly);
QByteArray nonCompressedData;
foreach(const QString &file,future.results()){
    //Fichier d'entrée
    QFile inFile(file);
    inFile.open(QIODevice::ReadOnly);
    nonCompressedData.append(inFile.readAll());
    inFile.close();
    text += file + "\n";
}

//QByteArray compressedData(qCompress(nonCompressedData,9));
//PROBLEM HERE
QFuture<QByteArray> futureCompressor = QtConcurrent::filtered(nonCompressedData,qCompress);
futureCompressor.waitForFinished();
QByteArray compressedData = futureCompressor.results();

outFile.write(compressedData);

问题是编译器向我提出错误

首先:没有匹配函数可用于调用filter(&QByteArray,)。

第二:从QList到非标量类型QByteArray的会话请求。

所以,我的问题是,有可能做我想做的吗?

提前致谢

不确定,qt4是否可以处理此问题。

QList<QByteArray> list;
...add ByteArrays to list...
auto wordMapFn  = [](QByteArray &arr){arr=qCompress(arr, 9);};
QFuture<void> f = QtConcurrent::map(list,wordMapFn);

这将压缩列表中的所有QByteArrays。 如果要保留未压缩的数组,请使用maped而不是map。 wordMapFn必须进行相应的调整。 如果只想压缩单个QByteArray QtConcurrent :: run,则可能更合适。

注意清单的使用寿命。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM