在我的应用程序在不同的线程槽我有在对话框以下代码:连接信号/使用QtConcurrent ::运行
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支持监控进度值(这将w^ork在这种情况下很棒!),但是这些不能与QtConcurrent::run
一起使用。
我该如何去将单独线程上发出的信号连接到主线程上的插槽,以便我可以监视发射器线程上调用的函数的进度?
* 编辑 - *我实际上发现我的代码有错误,但似乎没有影响。我忘了的信号后,添加this
作为参数
connect(drive, SIGNAL(FileProgressChanged(Progress)), this, SLOT(OnFileProgressChanged(Progress)));
我真的不明白,乍一看这似乎应该工作。该线程从'drive'发出'FileProgressChanged' - 正在调用'OnFileProgressChanged'吗?从一个线程发送信号到另一个线程的插槽应能正常工作(它会被排队)。 – 2012-02-20 20:38:27
在发出的函数上,代码是'发出FileProgressChanged(p)'。如果我进入这一步,它会将我带到[this](http://pastebin.com/hhSa8WjV),但我的断点OnFileProgressChanged永远不会被击中。 – Lander 2012-02-20 20:46:31