QFutureWatcher не вызывает подключенный слот

У меня есть следующий код, который реализует 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 вызывается?

4

Решение

Проблема в том, что объект-наблюдатель уничтожается при выходе из MyClass::on_fetchButton_clicked() метод. Разрушенный объект не может излучать что-либо. Попробуйте выделить и подключить наблюдателя в конструкторе вашего класса. Не забудьте уничтожить в деструкторе.

6

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]