Название: QFutureWatcher and QProgressBar
Отправлено: Андрей от Август 10, 2021, 10:11
Всем привет. Пытаюсь сделать приложение, которое обновляло бы QProgressBar в диалоге с помощью QFutureWatcher. Но ProgressBar не обновляется. При этом если не использовать QProgressBar, а заменить его на QProgressDialog все работает. Думаю, собака зарыта в некоректной обработке сигналов. Может кто-нибудь сталкивался с такой проблемой? Код: MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this);
auto* progress = ui->progressBar; QObject::connect(&futureWatcher, &QFutureWatcher<void>::finished, progress, &QProgressBar::reset); QObject::connect(ui->stopBtn, &QPushButton::clicked, &futureWatcher, &QFutureWatcher<void>::cancel); QObject::connect(&futureWatcher, &QFutureWatcher<void>::progressRangeChanged, progress, &QProgressBar::setRange); QObject::connect(&futureWatcher, &QFutureWatcher<void>::progressValueChanged, progress, &QProgressBar::setValue); }
std::function<void(int&)> spin = [](int& iter) { const int work = 1000 * 1000 * 40; volatile int v = 0; for (int j = 0; j < work; ++j) ++v;
qDebug() << "iteration " << iter << " in thread" << QThread::currentThreadId(); };
void MainWindow::on_startButton_clicked() { for (int i =0; i < 200; i++) m_list.push_back(i);
qDebug() << QString("Progressing using %1 thread(s)...").arg(QThread::idealThreadCount());
m_fututre = QtConcurrent::map(m_list, spin); futureWatcher.setFuture(m_fututre); }
Название: Re: QFutureWatcher and QProgressBar
Отправлено: tux от Август 10, 2021, 10:14
Вы бы хоть пример кода привели.
Название: Re: QFutureWatcher and QProgressBar
Отправлено: Андрей от Август 10, 2021, 10:41
Вы бы хоть пример кода привели.
Да, не подумал. Добавил пример кода :)
|