Aak*_*ain 4 c++ qt qtconcurrent
我有以下代码实现QtConcurrent::run()与QFutureWatcher启动fetch()运行shell进程的函数.完成后,我想调用该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";
[...]
}
Run Code Online (Sandbox Code Playgroud)
fetch()工作正常,但程序只显示调试消息,Thread done而不是Slot called.为什么不writeDesc被召唤?
问题是观察者对象在离开MyClass::on_fetchButton_clicked()方法时被破坏.被破坏的物体不能发射物体.尝试在类的构造函数中分配和连接观察程序.不要忘记在析构函数中销毁.