我正在尝试使用QFileSystemModel填充QListWidget(在图标视图中)。我想列出具有特定扩展名的文件夹和仅文件。我想将我的文件预览显示为缩略图,因此我将QIconProvider类子类化,并将其设置为我的模型。 在将QIconProvider设置为模型之前,我已经在模型上过滤了我想要的文件,为列出的目录中存在的每个文件调用icon(const QFileInfo& info)。 我在返回自定义图标之前找到了检查文件扩展名的工作,但我想知道是否可以避免这种情况。
m_itemsModel = new QFileSystemModel(this);
m_itemsModel->setFilter(QDir::AllEntries | QDir::NoDotAndDotDot);
m_itemsModel->setRootPath(QDir::homePath());
QStringList filters = formatsList();
m_itemsModel->setNameFilters(filters);
m_itemsModel->setNameFilterDisables(false);
ui.listView->setModel(m_itemsModel);
m_itemsModel->setIconProvider(new ThumbnailIconProvider(QRect(0, 0, 50, 50)));
我的QIconProvider:
ThumbnailIconProvider::ThumbnailIconProvider(const QRect &rect)
: QFileIconProvider() {
m_rect = rect;
}
QIcon ThumbnailIconProvider::icon(const QFileInfo & info) const {
static QStringList filters = formatsList();
QString fileName = info.fileName();
QString extension = "*" + fileName.right(fileName.length() - fileName.lastIndexOf("."));
if (info.isFile() && filters.contains(extension)) {
QString path = info.absoluteFilePath();
FileDetails details = fileDetailsFromPathForRect(path, m_rect);
QPixmap pixmap = QPixmap::fromImage(details.image);
QIcon icon(pixmap);
return icon;
}
else
return QFileIconProvider::icon(info);
}
有什么想法吗?