В моем приложении у меня есть следующий код в диалоге:
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)));