В моем проекте у меня есть 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);
}
Это:
становится:
Как я могу только изменить значок файлов?
Спасибо за ваше время 🙂
Я ответил на свой вопрос:
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);
}
Попробуйте получить имя файла и проверьте, является ли это файл или нет. Так должно быть что-то вроде этого:
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
}