QFuture & л; & пустот GT; не будет работать

Я пытаюсь заставить мое приложение работать в нескольких потоках, чтобы сделать его процессы более эффективными. Я нашел на сайте Qt QFuture класс, который мог бы помочь мне. Я пытаюсь использовать как в одном из своих примеров. Ниже приведена часть моего объявления / определения класса.

class PreferencesWindow {
public:
PreferencesWindow(QWidget *parent = 0);
public slots:
void dbsChanged();
}

PreferencesWindow::PreferencesWindow(QWidget *parent = 0) {
QFuture<void> fns = run(dbsChanged);
}

Когда я пытаюсь запустить его, я получаю 48 ошибок (из этой единственной строки), например:

error C2780: 'QFuture<FunctionObject::result_type> QtConcurrent::run(FunctionObject *,const Arg1 &)' : expects 2 arguments - 1 provided

Где я не прав и как это сделать, чтобы запустить этот слот в другом потоке?

Зачем мне это?
Выполнение этого метода может занять до 30 секунд (он проверяет некоторые настройки базы данных). В течение этого времени графический интерфейс завис, и это приведет к ухудшению работы пользователей, поэтому я считаю, что это хорошее решение.

3

Решение

Вы должны предоставить указатель на объект, а также адрес функции-члена класса, например:

QFuture<void> fns = QtConcurrent::run(this,&PreferencesWindow::dbsChanged);

Если ваша функция имеет параметры, вы можете передать их:

QFuture<void> fns = QtConcurrent::run(this,&PreferencesWindow::dbsChanged, val1, val2);
5

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

dbsChanged() является функцией-членом — вам нужно предоставить объект, для которого она будет выполняться. Если вы хотите это на самом объекте, используйте this:

PreferencesWindow::PreferencesWindow(QWidget *parent = 0) {
QFuture<void> fns = run(dbsChanged, this);
}
0

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