私のアプリケーションでは、ダイアログに次のコードがあります。
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)));