Об использовании будущего в вашем слоте:
Ваш лямбда-слот копирует будущее и указатель наблюдателя по значениям. Поэтому, когда слот вызывается, его не волнует исходное будущее, вышедшее из области видимости.
Об использовании будущего внутри объекта QFutureWatcher<VariantTable>
:
Если мы посмотрим на реализацию QFutureWatcher<T>::setFuture()
в исходном коде QFutureWatcher
, мы увидим:
template <typename T>
Q_INLINE_TEMPLATE void QFutureWatcher<T>::setFuture(const QFuture<T> &_future)
{
if (_future == m_future)
return;
disconnectOutputInterface(true);
m_future = _future;
connectOutputInterface();
}
private
member m_future
определяется как QFuture<T> m_future;
.
Очевидно, QFutureWatcher
владеет своей собственной копией данного будущего.
Следовательно, исходное будущее больше не используется после вашего инструкция: watcher->setFuture(future);
Чтобы ответить на ваш вопрос:
У меня есть следующий код, который работает (но он не должен работать)
На самом деле, с тем, что упоминалось ранее, оно должно работать:)
Примечание: Может работать не так, как задумано, так как скопированное будущее в вашем слоте и скопированное будущее в ваш объект-наблюдатель - это два разных экземпляра.