• 9664阅读
  • 5回复

求助!QListView效率低下 [复制链接]

上一主题 下一主题
离线watera
 
只看楼主 正序阅读 楼主  发表于: 2010-07-31
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —
我想做一个看图程序.用QAbstractListModel读取指定目录下的所有图片,然后由QListView显示.图片数目小时速度尚可,但数目大于几十张后程序就反应很慢,连改变窗口大小都困难.请问如何提升性能?
Model部分代码如下:
QStringList files;
QVariant PhotoModel::data(const QModelIndex &index, int role) const
{
    if(!index.isValid())
        return QVariant();
    if(index.row()>files.size())
        return QVariant();
    if(role == Qt::DisplayRole)
        return files.at(index.row());
    else if(role == Qt::DecorationRole)
    {
        QVariant v;
        v.setValue(QIcon(currentPath + "/" + files[index.row()]));
        return v;
    }
    return QVariant();
}
离线六允

只看该作者 5楼 发表于: 2014-09-11
ui->listView->setUniformItemSizes(true);
离线tootzoe
只看该作者 4楼 发表于: 2010-08-01
另外开一条线程进行图片放缩, 你的窗口就不会被冻结了
离线dbzhang800

只看该作者 3楼 发表于: 2010-07-31
引用第1楼watera于2010-07-31 21:26发表的  :
初步找到解决方法:
QListView在改变大小时都会重复调用model()->data(),造成图片重复读取,只要在Model里建一个QList<QIcon>保存已读取的图片,速度大有提高.
但是第一次显示图片时仍然很慢,如何解决?

先让你的QIcon显示空白图标,开个线程读文件
离线dbzhang800

只看该作者 2楼 发表于: 2010-07-31
引用楼主watera于2010-07-31 21:11发表的 求助!QListView效率低下 :
我想做一个看图程序.用QAbstractListModel读取指定目录下的所有图片,然后由QListView显示.图片数目小时速度尚可,但数目大于几十张后程序就反应很慢,连改变窗口大小都困难.请问如何提升性能?
Model部分代码如下:
QStringList files;
QVariant PhotoModel::data(const QModelIndex &index, int role) const
{
 v.setValue(QIcon(currentPath + "/" + files[index.row()]));
.......

你这是读图片文件操作,这种东西读一遍存起来就行了吧,如此反复地文件操作,效率不太可能高
离线watera
只看该作者 1楼 发表于: 2010-07-31
初步找到解决方法:
QListView在改变大小时都会重复调用model()->data(),造成图片重复读取,只要在Model里建一个QList<QIcon>保存已读取的图片,速度大有提高.
但是第一次显示图片时仍然很慢,如何解决?
快速回复
限100 字节
 
上一个 下一个