为啥 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 中看不到文件图标?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我在 Dev-C++ 中看不到项目文件?

为啥 Eslint 在 .vue 文件中看不到全局 TypeScript 类型(no-undef)

KivyMD,在 android 中看不到图标,但在 linux 上工作

我的微信下载了文件,为啥文件管理里面找不到?

html小问题:网页中为啥有些内容在html源文件中看不到相应关键字?

为啥我在 osgi 控制台中看不到任何帮助?