在我的项目中,我有一个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);
}
此:
变为:
我怎样才能更改文件的图标?
感谢您的时间:)
答案 0 :(得分:1)
我回答了自己的问题:
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);
}
答案 1 :(得分: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
}