簡體   English   中英

QFuture <void>無效

[英]QFuture<void> won't work

我試圖讓我的應用程序在多個線程上運行,以使其進程更有效。 我在Qt的網站上找到了可以幫助我的QFuture temmplate課程。 我試圖在他們的一個例子中使用。 以下是我的類聲明/定義的一部分。

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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM