我有以下代码使用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
召唤?
答案 0 :(得分:6)
问题是当离开MyClass::on_fetchButton_clicked()
方法时,观察者对象被破坏。被破坏的物体不能发射物体。尝试在类的构造函数中分配和连接观察程序。不要忘记在析构函数中销毁。