void DocsetRegistry::loadDocset(const QString &path) { auto watcher = new QFutureWatcher<Docset *>(); connect(watcher, &QFutureWatcher<Docset *>::finished, this, [this, watcher] { QScopedPointer<QFutureWatcher<Docset *>, QScopedPointerDeleteLater> guard(watcher); Docset *docset = watcher->result(); // TODO: Emit error if (!docset->isValid()) { qWarning("Could not load docset from '%s'. Reinstall the docset.", qPrintable(docset->path())); delete docset; return; } docset->setFuzzySearchEnabled(m_fuzzySearchEnabled); const QString name = docset->name(); if (m_docsets.contains(name)) { unloadDocset(name); } m_docsets[name] = docset; emit docsetLoaded(name); }); watcher->setFuture(QtConcurrent::run([path] { return new Docset(path); })); }