2016-03-28 12 views
1

qscrollarea kullanarak bir belge/resim görüntüleyici uygulamaya çalışıyorum. Birçok sayfa içeren dosyaları yüklerken yavaşça qscrollarea gerçekleştirdim. Yaklaşık 1.3 bin sayfalık bir belge için, yüklemeyi bitirmek yaklaşık yarım dakika sürdü. ,Çok sayıda görüntü ile qscrollarea performansı nasıl geliştirilir?

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

Ben robot sistemi otomatik şişirir bir mekanizmaya sahiptir biliyorum geri dönüştürür ve görüşlerini yeniden kullanır:

ana yükleme prosedürü böyledir. Qt'nin böyle bir mekanizması var mı?

+0

Sorununuz, tüm bu görüntüleri önceden yüklemektedir. Bunu yapma. Onları talep üzerine yükleyin. Bunu başarmak için 'QLabel'ı biraz özelleştirmeniz veya kendi widget'ınızı yapmalısınız. –

+0

@KubaOber Peki "Onları talep üzerine yükle" nasıl? Bana bazı ipuçları gösterebilir misin? – Lion

+0

Yüklemeyi etiketin kendisi ilk defa boyandıktan sonra gerçekleştirebilirsiniz: etiket yeniden boyaması olayını aldığında izleyin ve görüntüyü üzerine yükleyip ayarlayın. Yine de, her bir resmin a-priori boyutlarını bilmeniz gerekir, böylece etiketlerin doğru boyutları vardır, ancak içeriği yoktur. –

cevap

2

Sizinki, model görünümü programlamayı kullandığınız tipik bir durumdur. Alt sınıf QAbstractListModel ve hedeflerinize ulaşmak için QListView'ı kullanın. Widget'ları doğrudan QScrollArea'a eklemek veya bu konu için doğrudan QScrollArea boyama yapmak bellek yoğun ve çok kötü fikirlerdir.

Item Views Puzzle Example neredeyse tam olarak ihtiyacınız olan şeydir.