QFileSystemModel пользовательские значки?

В моем проекте у меня есть 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);
}

Это:

введите описание изображения здесь

становится:

введите описание изображения здесь

Как я могу только изменить значок файлов?

Спасибо за ваше время 🙂

2

Решение

Я ответил на свой вопрос:

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

Другие решения

Попробуйте получить имя файла и проверьте, является ли это файл или нет. Так должно быть что-то вроде этого:

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
}
0

По вопросам рекламы [email protected]