2016-12-16 32 views
0

QTreeWidgetを使用してフォルダを一覧表示しています。私は次のコードを書いて、それは絵のように見えます。QtreewidgetのフォルダをQtで一覧表示する

しかし、私はこのように表示したくありません。ボックスアイコンを追加し、ボックスの左側に破線を追加したいと思います。私はしたいコードの下に画像を追加しました。このようにどのように表示することができますか?

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の独自の実装を作成する必要があります。

ことで開始するには良いチュートリアル:ボックスのアイコンについて

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

このテーマは、基本的なWindowsフォームのプログラムのツリービューが同梱されています:あなたの装飾を入れてhttp://doc.qt.io/qt-5/qtwidgets-itemviews-simpletreemodel-example.html

コントロールとして、それはツリービューコントロールの古い外観です。それはWindowsの中に存在するので、それを引き起こす何らかの方法があるかもしれませんが、私はどのように考えていません。

関連する問題