【发布时间】:2014-03-22 13:53:41
【问题描述】:
我有以下代码实现QtConcurrent::run() 和QFutureWatcher 以启动运行shell 进程的fetch() 函数。完成后,我想调用writeDesc 函数,但它永远不会被调用。
void MyClass::on_fetchButton_clicked()
{
QFuture<void> fetcher;
QFutureWatcher<void> watcher;
connect(&watcher, SIGNAL(finished()), this, SLOT(writeDesc()));
fetcher = QtConcurrent::run(this, &MyClass::fetch);
watcher.setFuture(fetcher);
}
void MyClass::fetch()
{
[...]
qDebug()<<"Thread done";
}
void MyClass::writeDesc()
{
qDebug()<<"Slot called";
[...]
}
fetch() 工作正常,但程序只显示调试消息Thread done 而不是Slot called。为什么不调用writeDesc?
【问题讨论】:
-
提醒:由于自动变量在函数结束时被销毁而导致的问题的问题将被关闭。它们属于“简单错字”类别。 OTOH,确实 Qt 可以在一些特别容易被滥用的类的析构函数中提供 qWarning。
标签: c++ qt qtconcurrent