2016-03-28 2 views
1

Я пытаюсь реализовать средство просмотра документов/изображений с помощью qscrollarea. Я обнаружил, что qscrollarea работает медленно при загрузке файлов со многими страницами. Для документа, содержащего около 1,3 тыс. Страниц, для завершения загрузки потребовалось около полуминут.Как улучшить производительность qscrollarea с большим количеством изображений?

Основная процедура загрузки, как это:

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

Я знаю андроида есть механизм, который автоматически раздувает систему, перерабатывает и повторно использует представления. Имеет ли qt такой механизм?

+0

Ваша проблема заключается в загрузке всех этих изображений загодя. Не делай этого. Загружайте их по требованию. Вам нужно будет немного настроить QLabel для достижения этого или создать собственный виджет. –

+0

@KubaOber Итак, как «загрузить их по требованию»? Можете ли вы показать мне некоторые подсказки? – Lion

+0

Вы можете выполнить загрузку после того, как первая метка должна сама по себе нарисовать: отслеживать, когда метка получает событие перерисовки, а затем загружать и устанавливать на ней изображение. Однако вам нужно знать размеры каждого изображения априори, чтобы метки имели правильные размеры, но без содержимого. –

ответ

2

Ваш типичный случай, когда вы будете использовать программирование модели. Подкласс QAbstractListModel и используйте QListView для достижения ваших целей. Добавление виджета непосредственно в QScrollArea или, если на то пошло, на картинке непосредственно на QScrollArea - это интенсивные и очень плохие идеи с памятью.

Item Views Puzzle Example - это почти то, что вам нужно.

Смежные вопросы