Russian Qt Forum
Апрель 28, 2024, 00:01 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QFutureWatcher and QProgressBar  (Прочитано 1192 раз)
Андрей
Новичок

Offline Offline

Сообщений: 2


Просмотр профиля
« : Август 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);
}
« Последнее редактирование: Август 10, 2021, 10:42 от Андрей » Записан
tux
Крякер
****
Offline Offline

Сообщений: 399



Просмотр профиля
« Ответ #1 : Август 10, 2021, 10:14 »

Вы бы хоть пример кода привели.
Записан

Андрей
Новичок

Offline Offline

Сообщений: 2


Просмотр профиля
« Ответ #2 : Август 10, 2021, 10:41 »

Вы бы хоть пример кода привели.

Да, не подумал.
Добавил пример кода Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.045 секунд. Запросов: 22.