[英]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.