вызвать в отдельном потоке функцию с возможностью обновлять прогрессбар?
есть очень долгая ф-ция с возможностью передачи callback функции и данных:
typedef bool (loadProgressFunc) (int percent, void* userHandle);
bool veryLongFunc(int inputData, loadProgressFunc progress, void* userHandle);
как сделать вызов этой функции в отдельном потоке, но что бы в окне прогресс бар обновлялся?
static bool process(int percent, void* userHandle) {
qDebug() << __PRETTY_FUNCTION__ << percent;
MainWindow* _this = static_cast<MainWindow*>(userHandle);
_this->testFunc(percent);
return true;
}
void MainWindow::testFunc(int percent) {
ui->progressBar->setValue(percent);
}
void MainWindow::startLongFunc() {
veryLongFunc(1, process, this);
}
QtConcurrent ?
если я запущу в отдельном потоке veryLongFunc, то вряд ли от туда у меня будет доступ к MainWindow
Доступ то будет через сигналы/слот, захватите ваш прогресс бар или свяжите через прослойку
вот, про прослойку в виде отдельного класса потомка QObject я и говорю, который сможет отправить сигнал и в mainWindow его принять. А есть другие варианты, что бы класс не городить?
Через лямбду если хотите, в которую надо захватить прогресс бар.
Обсуждают сегодня