为啥 QListView 中看不到文件图标?
Posted
技术标签:
【中文标题】为啥 QListView 中看不到文件图标?【英文标题】:Why are File Icons not visible in QListView?为什么 QListView 中看不到文件图标? 【发布时间】:2014-06-14 07:12:36 【问题描述】:我的应用程序中有一个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) ;
这是屏幕截图:-
【问题讨论】:
您是否在buff
中包含了文件扩展名(例如:.txt)?
是的,我已经收录了
什么是“同一个图标”?可以截图吗?
好的,马上贴出来。
@Tay2510 发布了屏幕截图
【参考方案1】:
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
。
【讨论】:
另外值得实现自己的模型类,这样您只需要获取可见的文件图标(可以缓存) 好的,但还有一个问题,ListView 为每种文件类型显示相同的图标,而不是为不同的文件类型显示不同的图标 @ps06756 你能告诉我代码吗?在我的演示中,它确实显示了不同文件类型的不同图标。 @Tay2510 编辑了问题并发布了新代码。以上是关于为啥 QListView 中看不到文件图标?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Eslint 在 .vue 文件中看不到全局 TypeScript 类型(no-undef)
KivyMD,在 android 中看不到图标,但在 linux 上工作