如何将图像显示为缩略图

Lio*_*ing 4 c++ qt image thumbnails qt5

我有一个QTreeView显示硬盘驱动器和目录。我也有一个QListView显示图像文件如下:

但我想将图像显示为缩略图,如下所示:

我的代码:

mainWidget::mainWidget(QWidget *parent) : QWidget(parent), ui(new Ui::mainWidget){
    ui->setupUi(this);
    dirsModel = new QFileSystemModel;
    filesModel = new QFileSystemModel;
    dirsModel->setRootPath("");
    ui->treeView->setModel(dirsModel);
    ui->listView->setModel(filesModel);
    dirsModel->setFilter(QDir::AllDirs | QDir::NoDotAndDotDot);
    filesModel->setFilter(QDir::Files);
    ui->treeView->hideColumn(1);
    ui->treeView->hideColumn(2);
    ui->treeView->hideColumn(3);
    ui->treeView->header()->hide();
}

void mainWidget::on_treeView_clicked(const QModelIndex &index){
    ui->listView->setRootIndex(filesModel->setRootPath(dirsModel->filePath(index)));
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,我不知道将图像视图从图标更改为缩略图的方法是什么。

Ake*_*ian 6

根据你的追求,我认为有更好的方法来解决它,但这里有一个基于我在 python 中的项目的示例:

您可以做的是将 QFileIconProvider 子类化:

ICON_SIZE = QSize(64,64)
accepted_types = (".jpg",".tiff",".png",".exr",".psd")

# this depends on the plugins you have installed,
# PSD and EXR requires external ones).

class IconProvider(QFileIconProvider):

    def __init__(self) -> None:
        super().__init__()

    def icon(self, type: 'QFileIconProvider.IconType'):

        fn = type.filePath()

        if fn.endswith(accepted_types):
            a = QPixmap(ICON_SIZE)
            a.load(fn)
            return QIcon(a)
        else:
            return super().icon(type)
Run Code Online (Sandbox Code Playgroud)

然后在您使用的模型上:

self.fileSystemModel.setIconProvider(IconProvider)
Run Code Online (Sandbox Code Playgroud)

TreeView 上的示例: 自定义图标提供程序预览