为什么文件图标在QListView中不可见?

时间:2014-06-14 07:12:36

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

我的应用程序中有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) ; 

以下是截图: -

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:3)

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

enter image description here