首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QFuture<void>不能工作

QFuture<void>不能工作
EN

Stack Overflow用户
提问于 2014-06-26 10:19:10
回答 2查看 1.4K关注 0票数 3

我试图使我的应用程序在多个线程上运行,以提高其进程的效率。我在Qt的网站上发现,QFuture模板类可以帮助我。我试着用在他们的一个例子中。下面是我的类声明/定义的一部分。

代码语言:javascript
复制
class PreferencesWindow {
public:
    PreferencesWindow(QWidget *parent = 0);
public slots:
    void dbsChanged();
}

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

当我尝试运行它时,我得到48个错误(从这一行)如下:

代码语言:javascript
复制
error C2780: 'QFuture<FunctionObject::result_type> QtConcurrent::run(FunctionObject *,const Arg1 &)' : expects 2 arguments - 1 provided

我错在哪里,如何才能在不同的线程上运行这个槽?

为什么要这样做?这个方法的执行可能需要30秒(它检查一些数据库设置)。在此期间,GUI被冻结,这将导致糟糕的用户体验,因此我发现这是一个很好的解决方案。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-26 10:36:25

您应该提供指向对象的指针以及类成员函数的地址,如下所示:

代码语言:javascript
复制
QFuture<void> fns = QtConcurrent::run(this,&PreferencesWindow::dbsChanged);

如果您的函数具有参数,则可以传递它们:

代码语言:javascript
复制
QFuture<void> fns = QtConcurrent::run(this,&PreferencesWindow::dbsChanged, val1, val2);
票数 5
EN

Stack Overflow用户

发布于 2014-06-26 10:20:27

dbsChanged()是一个成员函数-您需要提供一个对象来执行它。如果要将其放在对象本身上,请使用this

代码语言:javascript
复制
PreferencesWindow::PreferencesWindow(QWidget *parent = 0) {
    QFuture<void> fns = run(dbsChanged, this);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24427934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档