QFileSystemModel如何自定义图标?

5
在我的项目中,我有一个QTreeView显示驱动器上的位置。我需要将所有文件的图标更改为自定义图标,但保留文件夹的图标不变。
我重新实现了QFileSystemModel,并成功地更改了所有图标。是否有办法仅限于更改文件而不是文件夹?
QVariant MyQFileSystemModel::data(const QModelIndex& index, int role) const
{
    if(role == Qt::DecorationRole)
        return QPixmap(":/icons/TAG_Int.png");
    return QFileSystemModel::data(index, role);
}

这个:

enter image description here

变成了:

enter image description here

我该怎么只改文件的图标?

感谢您的时间 :)

2个回答

3

我自己回答了我的问题:

QVariant MyQFileSystemModel::data( const QModelIndex& index, int role ) const {
    if( role == Qt::DecorationRole )
    {
        QFileInfo info = MyQFileSystemModel::fileInfo(index);

        if(info.isFile())
        {
            if(info.suffix() == "dat")
                return QPixmap(":/icons/File_Icon.png");//I pick the icon depending on the extension
            else if(info.suffix() == "mcr")
                return QPixmap(":/icons/Region_Icon.png");
        }
    }
    return QFileSystemModel::data(index, role);
}

0
尝试获取文件名并检查它是否为文件。因此,应该像这样:
QVariant MyQFileSystemModel::data(const QModelIndex& index, int role) const
{
    if(role == Qt::DecorationRole)
    {
        QString name = index.data();//get filename
        QFileInfo info(name);       
        if(info.isFile())           //check
            return QPixmap(":/icons/TAG_Int.png");//return image if file
    }
    return QFileSystemModel::data(index, role);   //if not, standard processing
}

我在index.data()中添加了toString()以使其编译。结果没有改变任何图标。它看起来像我在帖子中链接的第一张图片。 - mrg95

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接