2010-11-26 36 views
2

我在Qt中構建了一個GUI應用程序,它具有與Google Maps類似的功能(即,您可以平移/縮放並顯示更多的地圖)。目前,我正在動態加載256個像素的圖像塊(來自硬盤驅動器)。在Qt 4.7中流式QImages

正如你可以想象,當我平移和縮放時,這會減慢我的程序。我想使用一個單獨的線程(MapLoader)來根據需要加載圖像。

我的數據類有一個指向圖像的三重指針(即QImage * [x] [y])。視口外的圖像爲空,而視口內的圖像爲QImage指針。

我的問題是,我希望我的畫家能夠訪問圖像數組並繪製它們(不管它們是否被加載)。同時將圖像加載到陣列中而不阻止對陣列的訪問。

我該如何解決這個問題?圖像數組是否必須是易失性的?

回答

0

在測試應用程序的QtLabs(包含視頻)上有一個很好的演示,它與您的情況相關。它是一個圖像瀏覽器,可以將圖像加載到網格中。儘管作者聲明它不是最佳解決方案,但我認爲它應該包含一些有用的信息,以便使用線程來加載內容。你可以看到它here。我想在評論部分也可能會有一些有趣的鏈接。

0

您應該能夠將圖像加載到工作線程,並讓這些線程在圖像準備好時以某種方式發出信號,以及圖像的位置。 (使用QtConcurrent是我的第一個傾向。)如果使用信號/插槽連接,默認情況下Qt會確保插槽在其正確的線程中運行。因此,在UI線程中創建圖像類,讓工作線程在讀取圖像時發出帶有圖像的信號,並讓圖像類中的插槽(仍在UI線程上下文中)正確存儲圖像。由於地圖中的分配和地圖中的讀數在同一個線程上下文中,因此不需要使用任何易失性標記或鎖定。