Я хочу написать небольшую программу, которая сжимает все файлы из каталога с помощью qCompress QByteArray.Как использовать QtConcurrent для qCompress на QByteArray?
Однако я хочу запустить сжатие в многопоточной среде с помощью 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);
Проблема заключается в том, что компилятор не поднять мне ошибки
Во-первых: Нет функции согласования для вызова к фильтруется (& QByteArray,).
Во-вторых: конвертируется из QList в нескалярный тип QByteArray.
Итак, мой вопрос в том, можно ли делать то, что я хочу?
Заранее спасибо
Можно, конечно, сжимать массив в отдельном потоке. Но так, как вы пытаетесь это сделать ... это немного пахнет: «Давайте возьмем случайную функцию от QtConcurrent, случайно передадим ему некоторые параметры и надеемся на лучшее» – Greenflow
Тогда вы можете вести меня наилучшим образом сделать это? – JohnnyBeGoody
Вы можете написать функцию, которая сжимает ваш QByteArray с помощью qCompress, а затем выполняет эту функцию в другом потоке с помощью QtConcurrent :: run. – Greenflow