2016-12-16 182 views
0

我正在使用QTreeWidget列出文件夹。我写了下面的代码,它看起来像图片。在Qt c + +中使用Qtreewidget列出文件夹

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

enter image description here

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(); 
} 

我想这是如下

enter image description here

回答

1

有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 Forms程序的TreeView控制,因为它是树视图控件的旧外观。可能有一些方法来触发它,因为它存在于Windows内部,但我不知道如何。

相关问题