C++ Qt图像列表
我正在寻找一种高效的方法来查看Qt5.8中JPEG的缩略图列表(可能有几千个) 我目前的方法是使用C++ Qt图像列表,c++,qt,qt5,qt5.8,C++,Qt,Qt5,Qt5.8,我正在寻找一种高效的方法来查看Qt5.8中JPEG的缩略图列表(可能有几千个) 我目前的方法是使用QListWidget(参见下文和)。事实证明,这是太慢了,因为它需要永远组装,即使是一些图像 我正在寻找: 了解我目前的方法为何如此缓慢 为了获得更有效的方法,仍然需要尽可能多地依赖Qt的特性,从而只需要很少的代码 当前方法: ui->listWidget->setViewMode (QListWidget::IconMode); ui->listWidget->setI
QListWidget
(参见下文和)。事实证明,这是太慢了,因为它需要永远组装,即使是一些图像
我正在寻找:
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));
(因此,
文件
属于std::vector
类型)一个快速的解决方案可能是创建一个简单的类,该类继承自QListWidgetItem
,并根据需要修复缩略图。您可以尝试(注意:未经测试)
您仍然需要循环为每个文件创建一个项目,但至少它推迟了缩略图的构建
一个更优雅的解决方案可能涉及使用完全分离的模型和视图对象,并自定义执行缩略图生成和缓存。对于G.M.的回答,我没有太多的评论,因此我补充了以下内容: 由于以下两个原因,初始化可能需要很长时间:
setScaledSize(const QSize&size)
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));
}
};