gpt4 book ai didi

c++ - Qt 图像列表

转载 作者:搜寻专家 更新时间:2023-10-31 01:32:05 25 4
gpt4 key购买 nike

我正在寻找一种有效的方法来查看 Qt 5.8 中的 jpeg 缩略图列表(可能有数千个)。

我目前的方法是使用 QListWidget (见下文和 this question )。结果证明这太慢了,因为它需要很长时间才能组装,即使是一些图像。

我在看:

  1. 了解为什么我目前的方法如此缓慢。
  2. 通过尽可能多地依赖 Qt 的功能,获得一种更有效的方法,它仍然只需要很少的代码。

当前方法:

ui->listWidget->setViewMode  (QListWidget::IconMode);
ui->listWidget->setIconSize (QSize(200,200) );
ui->listWidget->setResizeMode(QListWidget::Adjust );

for ( auto &i : files )
ui->listWidget->addItem(new QListWidgetItem(QIcon(i),i));

(files 属于 std::vector<QString> 类型)

最佳答案

一个快速的解决方案可能是创建一个继承自 QListWidgetItem 的简单类,并根据需要修复缩略图。您可以尝试类似(注意:未经测试)...

class thumbnail_item: public QListWidgetItem {
using super = QListWidgetItem;
public:
explicit thumbnail_item (const QString &filename)
: super(filename)
{}
virtual QVariant data (int role) const override
{
if (role == Qt::DecorationRole) {
QIcon i = super::icon();
if (i.isNull()) {

/*
* The existing thumbnail (if any) is empty so create one
* from the file name and use it -- remembering to call
* setIcon so we don't need to go through all this again
* next time.
*/
i = QIcon(data(Qt::DisplayRole));
setIcon(i);
}
return(i);
}
return(super::data(role));
}
};

您仍然需要循环为每个文件创建一个项目,但至少它推迟了缩略图的构建。

一个更优雅的解决方案可能涉及使用完全分离的模型和带有自定义 View 对象的 proxy model执行缩略图生成和缓存。

关于c++ - Qt 图像列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44087921/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com