【问题标题】: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 发布了屏幕截图

标签: c++ linux qt user-interface qlistview


【解决方案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 编辑了问题并发布了新代码。
猜你喜欢
  • 1970-01-01
  • 2016-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 2015-07-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多