У меня есть следующий код, который реализует QtConcurrent::run()
с QFutureWatcher
чтобы начать 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
вызывается?
Проблема в том, что объект-наблюдатель уничтожается при выходе из MyClass::on_fetchButton_clicked()
метод. Разрушенный объект не может излучать что-либо. Попробуйте выделить и подключить наблюдателя в конструкторе вашего класса. Не забудьте уничтожить в деструкторе.
Других решений пока нет …