2015-10-07 141 views
0

我正在製作識別圖像中牌照的應用程序。它工作正常,但現在我想將代碼的圖像分析部分移至單獨的線程。我正在使用Qt 5.4。在閱讀文檔後,我決定使用QtConcurrent::map是正確的,因爲在處理圖像之前,用戶加載存儲在列表中的文件(只有它們的名稱)。下面是一些代碼:Qt併發地圖錯誤c2440

results detectPlates(const QString &file); 

試圖使用多線程:這是應該在一個線程中運行的功能

定義

QFuture<results> r = QtConcurrent::map(files, &MainWindow::detectPlates) 

files被定義爲QList<QString> results是一種類型定義在我正在使用的庫中,如果這很重要。

這並不與錯誤編譯:

C2440 'initializing' cannot convert from `QFuture<void>` to `QFuture<results>` 

當我修改功能是<void>然後我得到:

error c2064: term does not evaluate to a function taking 1 argument. 

問題是什麼?我將不勝感激任何幫助。

回答

2

QtConcurrent::map修改這些項目,並返回一個無效的未來。如果您想以QFuture<T>的形式返回結果,則需要使用QtConcurrent::mapped

+1

[此Qt 5.4文檔](http://doc.qt.io/qt-5.4/qtconcurrentmap.html)很好地解釋了各種'QtConcurrent'映射函數之間的區別。 – RobbieE

+0

@ajshort感謝您的回覆。我嘗試過,但它仍然給出了同樣的錯誤。我甚至試着用一個虛函數返回一個'int'並將'ints'的'QVector'映射到它,甚至不起作用。它可以在控制檯應用程序中正常工作,沒有任何問我完全失去了這一點。 –

+0

它使靜態功能。 –