2016-03-28 31 views
1

我正在嘗試使用qscrollarea實現文檔/圖像查看器。加載多頁文件時,我發現qscrollarea執行速度很慢。對於大約1.3k頁的文檔,完成加載需要大約半分鐘的時間。如何提高大量圖像的qscrollarea性能?

主要裝載過程是這樣的:

for (int i = 0; i < DOC_COUNT; ++i) { 
    QLabel *label = new QLabel(); 
    label->setPixmap(IMAGE); 
    qvboxlayout_->addWidget(label); 
    QCoreApplication::processEvents(); 
} 

我知道Android有系統自動膨脹的機制,回收和再利用的意見。 qt是否有這樣的機制?

+0

你的問題是提前加載所有這些圖像。不要這樣做。根據需要加載它們。你必須自己定製'QLabel'來實現它,或者製作你自己的小部件。 –

+0

@KubaOber那麼如何「按需加載」?你能告訴我一些線索嗎? – Lion

+0

您可以在標籤第一次自行繪製之後執行加載操作:監視標籤何時獲取重繪事件,然後只加載並設置圖像。不過,您需要先了解每個圖像的大小,以便標籤具有正確的尺寸但沒有內容。 –

回答

2

你是典型的案例,你會使用模型視圖編程。子類QAbstractListModel並使用QListView來實現您的目標。將小部件直接添加到QScrollArea或者直接在QScrollArea上直接繪製內存密集且非常糟糕的想法。

Item Views Puzzle Example幾乎正是你所需要的。