在Qt C ++中列出带有Qtreewidget的文件夹

oghuzhan沸腾

我正在使用QTreeWidget列出文件夹。我写了以下代码,它看起来像图片。

但是,我不希望这样显示它。我想添加一个框图标,并在框的左侧添加一条虚线。我在想要执行的代码下面添加了一张图片。怎么能这样显示。

在此处输入图片说明

QTreeWidgetItem *topLevelItem = NULL;

foreach (const QString &fileName, fileNames)
{
   QList<QString> splitFileName;
   splitFileName.append(fileName.split("/"));


   // add root folder as top level item if treeWidget doesn't already have it
   if (ui->treeWidget->findItems(splitFileName[0], Qt::MatchFixedString).isEmpty())
   {
        topLevelItem = new QTreeWidgetItem;
        topLevelItem->setText(0, splitFileName[0]);
        ui->treeWidget->addTopLevelItem(topLevelItem);
   }

   QTreeWidgetItem *parentItem = topLevelItem;

   // iterate through non-root directories (file name comes after)
   for (int i = 1; i < splitFileName.size() - 1; ++i)
   {
   // iterate through children of parentItem to see if this directory exists
   bool thisDirectoryExists = false;

   for (int j = 0; j < parentItem->childCount(); ++j)
   {
       if (splitFileName[i] == parentItem->child(j)->text(0))
       {

            thisDirectoryExists = true;
            parentItem = parentItem->child(j);
            break;
       }
  }
  if (!thisDirectoryExists)
  {
      parentItem = new QTreeWidgetItem(parentItem);
      parentItem->setText(0, splitFileName[i]);

  }
}


   if(splitFileName.last()!="")
   {
       QTreeWidgetItem *childItem = new QTreeWidgetItem(parentItem);
       childItem->setText(0, splitFileName.last());
   }

 }

        fileNames.clear();
}

我希望它如下

在此处输入图片说明

埃尔坎

有2种可能的解决方案(来自http://www.qtcentre.org/threads/9155-how-to-add-icons-to-QTreeWidget的代码):

在运行时在您的项目上设置图标:

QTreeWidget Tree;
QTreeWidgetItem *item ;
item = new QTreeWidgetItem(Tree);
item->setText(0, text);
item->setIcon(0, QIcon("your icon path or file name "));
item->setExpanded( true );

定制型号:

如果需要更多自由度,则必须创建自己的QAbstractItemModel实现,因为根据节点中的数据,节点将具有不同的图形状态。

从此开始的好教程:http : //doc.qt.io/qt-5/qtwidgets-itemviews-simpletreemodel-example.html

放在哪里装饰:

QVariant YourModel::data(const QModelIndex &index, int role) const
{
    ...
    switch (role)
    {
        ...
        case Qt::DecorationRole: // <---
            return QIcon(...); // <---
        ...
    }
    ...
}

对于框图标

基本Windows窗体程序的TreeView控件随附此主题,因为它是树视图控件的旧外观。它可能存在某种触发方式,因为它存在于Windows中,但是我不知道如何触发。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Qt C++:包括项目文件夹中的所有库文件

在Qt,C ++中检查文件夹是否存在(并创建文件夹)

列出目录C +中的文件夹

在具有特定子文件夹的列表框中列出文件夹 - C#

使用 C# 在线列出 Sharepoint 上文件夹中的所有文件

C ++控制台中的星号列出了文件夹中的所有文件,为什么?

如何在窗口中显示文件夹中所有文件的名称?Qt C++

列出C中给定路径中的文件夹,子文件夹和文件(Windows)

QT C ++删除带有*的文件(名称包含)

是否有一种算法可以列出文件夹中的所有文件(对于 C#)?

C ++添加带有文件的文件夹

Qt / C ++中的DHCP选项

C ++ / Qt中的闭合轮廓

C ++ / Qt中变量的别名?

从Outlook中的共享文件夹中读取带有C#的电子邮件

如何在C#中打开带有身份验证的文件夹?

在Unix C ++中的文件夹根目录中列出文件和目录

如何在主要可执行文件的子文件夹中部署Qt C ++共享库的dll?

QT C ++下载多个文件,总计进度

在QT中使用Botan C ++加密文件

Qt C ++继续文件而不是覆盖

如何使用Excel VSTO C#列出特定文件夹中的所有excel文件名和每个文件中使用的总行数

批处理文件列出名为 #、A、B、C、D、到 Z 的子文件夹中的所有电影文件

包含文件夹没有出现在我的Qt项目树中

Qt:在getSaveFileName中隐藏文件夹

具有TableView的C ++ Qt QComboBox

具有Qt的C ++编译失败

具有Qt的C ++缓冲区

程序运行但没有显示Qt c ++