QFutureWatcher 没有调用连接的插槽
Posted
技术标签:
【中文标题】QFutureWatcher 没有调用连接的插槽【英文标题】:QFutureWatcher not calling connected slot 【发布时间】: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。 【参考方案1】:问题是观察者对象在离开MyClass::on_fetchButton_clicked()
方法时被销毁了。被破坏的物体不能发射东西。尝试在类的构造函数中分配和连接观察者。不要忘记在析构函数中销毁。
【讨论】:
以上是关于QFutureWatcher 没有调用连接的插槽的主要内容,如果未能解决你的问题,请参考以下文章