我希望在不阻止UI的情况下尽快显示大量小部件(~1万)。小部件是简单的QPixmap
,包含从磁盘加载并存储在QVector
内的图像。
以下是有问题的代码:
for (QPixmap image : images) {
QLabel* label = new QLabel();
label->setPixmap(image);
flowLayout->addWidget(label);
}
在超过5000万张图像的某个时刻,UI开始冻结,但随后又回来了。
我有一个使用QCoreApplication::processEvents()
的可能解决方案,但这使得该过程非常缓慢(虽然视觉上优雅)。
int k = 0;
for (QPixmap image : images) {
++k;
QLabel* label = new QLabel();
label->setPixmap(image);
flowLayout->addWidget(label);
if (k >= 100) {
QCoreApplication::processEvents();
k = 0;
}
}
使用 k 我正在尝试校准UI线程的刷新率。
所以我的问题是什么是最好的方法还是有良好的中间立场?一个显示多个小部件而不会压倒主线程的小部件。
旁注:我正在做一种涉及大量图像显示的基准测试。 JavaFX 方法几乎立即将图像从内存中吐出到UI,但我发现加载和显示图像时速度稍慢。我的意思是,C ++方法在大约5000个图像的每个方面都能更快地运行,但在此之后就会出现问题。