как использовать сигналы и слоты с 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();

             }

0 ответов

Другие вопросы по тегам