Соединение сигналов / слотов в отдельном потоке с помощью QtConcurrent :: run
В моем приложении у меня есть следующий код в диалоге:
connect(drive, SIGNAL(FileProgressChanged(Progress)), SLOT(OnFileProgressChanged(Progress)));
QtConcurrent::run(this, &ProgressDialog::PerformOperation, Operation, *Path, OutPath, drive);
Функция PerformOperation в конечном итоге вызывает функцию вdrive
который излучает сигналFileProgressChanged
, и мойOnFileProgressChanged
Функция выглядит следующим образом:
void ProgressDialog::OnFileProgressChanged(Progress p)
{
if (ui->progressCurrent->maximum() != p.Maximium)
ui->progressCurrent->setMaximum(p.Maximium);
ui->progressCurrent->setValue(p.Current);
if (ui->groupBoxCurrent->title().toStdString() != p.FilePath)
ui->groupBoxCurrent->setTitle(QString::fromStdString(p.FilePath));
}
Я немного читал и увидел, чтоQFuture а такжеQFutureWatcher поддерживать мониторинг значений прогресса (что будет прекрасно работать в этой ситуации!), но их нельзя использовать вместе сQtConcurrent::run
.
Как бы я подключил сигнал, передаваемый в отдельном потоке, к слоту в моем основном потоке, чтобы я мог отслеживать ход выполнения функции, вызываемой в потоке эмиттера?
*Редактировать -- * На самом деле я обнаружил ошибку в своем коде, но, похоже, это не влияет. Я забыл добавитьthis
в качестве аргумента после сигнала
connect(drive, SIGNAL(FileProgressChanged(Progress)), this, SLOT(OnFileProgressChanged(Progress)));