Q设备<void>不起作用

QFuture<void> won't work

本文关键字:不起作用 gt void lt 设备      更新时间:2023-10-16

我正在尝试使我的应用程序在多个线程上运行,以使其进程更高效。我在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秒(它会检查一些数据库设置)。在此期间,GUI被冻结,这将导致糟糕的用户体验,所以我发现这是一个很好的解决方案。

应该提供指向对象的指针和类成员函数的地址,如:

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

如果你的函数有参数,你可以传递它们:

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

dbsChanged()是一个成员函数—您需要提供一个对象来执行它。如果你想在对象本身上设置,使用this:

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