2016-03-28 57 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几乎正是你所需要的。