как использовать сигналы и слоты с QtConcurrent::run и QFutureWatcher
Я пытаюсь скопировать файлы с индикатором выполнения, у меня есть метод, который работает с
QtConcurrent::run
но когда я подключаюсь к progressBar, ничего не происходит, но файл успешно копируется. Я хотел бы знать, что не так с моим кодом и как исправить это спасибо ниже, у нас есть мой метод копирования и как я подключаюсь
signals and slots.
QProgressDialog progressDialog;
QFutureWatcher<void> futureWatcher;
QObject::connect(&futureWatcher, SIGNAL(progressRangeChanged(int,int)), &progressDialog, SLOT(setRange(int,int)));
QObject::connect(&futureWatcher, SIGNAL(Value(int value)), &progressDialog, SLOT(setValue(int)));
QObject::connect(&futureWatcher, &QFutureWatcher<void>::finished, &futureWatcher, &QFutureWatcher<void>::deleteLater);
QFuture<void> future = QtConcurrent::run([&, this, listu]() -> void
{
copia(listu.at(i), desPath);
});
futureWatcher.setFuture(future);
progressDialog.exec();
futureWatcher.waitForFinished();
метод копирования
void BackgroundContextMenu::copia(QString src,QString dest)
{
//QFile::copy(src,dest);
QFile Src(src);
QFile dst(dest);
int chunkSize(256);
if(Src.exists() && Src.open(QIODevice::ReadOnly) ){
QByteArray dataToCopy = Src.readAll();
if(dst.open(QIODevice::WriteOnly)) {
int index(0);
while(!Src.atEnd()){
QByteArray data = Src.read(chunkSize);
dst.write(data);
index+=chunkSize;
emit Value(index*100/Src.size());//current file copy progress
}
Src.close();
dst.close();
}