у меня есть QListView
в моем приложении и хочу отобразить список файлов с их значками, как показано в документации QT.
QListView находится в Icon mode
У меня есть следующий код: —
std::vector<std::string>::iterator it = result.begin() ; // got the results, now tie them to the StandardItemModel.
RespPara::stringList = new QStringList ;
RespPara::model = new QStringListModel ;
while(it!=result.end())
{
std::cout<<*it<<std::endl ;
RespPara::stringList->append((*it).c_str()) ;
it++ ;
}
RespPara::model->setStringList(*(RespPara::stringList)) ;
RespPara::mainWindow->listView->setModel(RespPara::model) ;
Теперь, хотя список файлов виден в основном приложении, значки не видны.
Что я здесь не так делаю? Как я могу исправить эту проблему?
РЕДАКТИРОВАТЬ: — Вот новый код, который дает один и тот же значок для всех типов файлов: —
while(!in.eof())
{
getline(in, buff) ;
QFileInfo fileInfo(buff.c_str()) ;
QFileIconProvider iconProvider ;
QIcon icon = iconProvider.icon(fileInfo) ;
QStandardItem* standardItem = new QStandardItem(icon, buff.c_str()) ;
myModel->appendRow(standardItem) ;
}
win.listView->setModel(myModel) ;
Вот снимок экрана:
QListView
не настолько силен, чтобы распознать значок файла, это просто просмотр списка. Если вы хотите отображать значки в QListView
Традиционный способ заключается в создании QIcon
и установите его для вашей модели, например:
QIcon icon(":/myIcons/theIcon.png");
model->setItem(0,0, new QStandardItem(icon, "Text next to the icon"));
В вашем коде нет никаких значков, поэтому вы их не видите.
В вашем случае QIcon
должны быть предоставлены значок файла и вы должны обратиться за помощью к QFileIconProvider
учебный класс. Следующий код получает значок файла из вашей системы:
QFileInfo fileinfo("C:/cat/is/lovely/Test.txt"); // Provides the information of file type
QFileIconProvider iconprovider;
QIcon icon = iconprovider.icon(fileinfo); // return QIcon according to the file type
После этого вы устанавливаете QIcon
на вашей модели.