2016-11-23 18 views
1

特定のフォルダからファイルの名前をツリーウィジェットのアイテムとして出力する必要があるプログラムを作成していますが、私はそれを把握していないようだ。あまりにも多くの手間をかけることなくリストウィジェットでやっていましたが、そのウィジェットをツリーウィジェットで使用することはできません。以下は、私はあなたが単にあなたの入力リストを反復処理し、各エントリのQTreeWidgetItemオブジェクトを作成リストウィジェットフォルダからファイルの名前を取得してqt内の子としてツリーウィジェットに追加する方法

mainwindow.cpp

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 

    QString path = "C:/Program Files/GUI_Project/bin"; 
    QDir dir(path); 
    if (!dir.exists()) 
     { 
      dir.mkpath(path); 
     } 
    QDir myPath(path); 
    myPath.setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot); 
    MyList = myPath.entryList(); 
    ui->listWidget->addItems(MyList); 
} 
+0

これは役に立つかもしれません:http://doc.qt.io/qt-5/qfilesystemmodel.html –

+0

問題は、特定のフォルダ内のファイルの名前だけを表示したいということです。 – Nick

答えて

0

で説明した機能を得るために書いたコードです。

ツリーウィジェットを親として渡すと、ツリー内の最上位アイテムになります。別のツリーウィジェットアイテムを親アイテムとして渡すと、そのアイテムの子エントリになります。

+0

これはでしょうかフォルダ内のアイテムの量がランダムに変化する場合はどうしたらいいですか? – Nick

+0

@ニック私の答えで説明したように、そうではないでしょう。私の答えは仲良くする方法です:/ – mrg95

+0

@ニックネームは必要なときにいつでもアイテムを再構築することができますが、mc360proによると、モデルベースのアプローチはこれをよりうまくやるでしょう。 –

1

もう1つの方法は、QFileSystemModelを使用し、setRootPath("your/path")を使用してフォルダのモデルを作成することです。 setFilter()を使用して、表示される内容を決定することができます。Filter List。そのモデルをQTreeViewに追加できます。これは、パフォーマンスがはるかに優れている点を除けば、QTreeWidgetのようなもので、ほとんどの使用例ではより良いオプションです。たとえば、ファイルがそのディレクトリに追加または削除されると、モデルはプログラムで変更され、更新されます。 A QTreeWidgetできません。

QFileSystemModel *dirModel = new QFileSystemModel(); //Create new model 
dirModel->setRootPath("C:/Program Files/GUI_Project/bin"); //Set model path 
dirModel->setFilter(QDir::Files); //Only show files 

ui->treeView->setModel(dirModel); //Add model to QTreeView 

QModelIndex idx = dirModel->index("C:/Program Files/GUI_Project/bin"); //Set the root item 
ui->treeView->setRootIndex(idx); 

あなたはしかしQTreeWidgetに固執する場合は、再帰的にフォルダの内容を反復処理し、個別に各項目を追加する必要があります。

+0

私は、ユーザーがプログラム内でドライブを見ることができないようにしたいが、フォルダとその中の項目しか見ることができないようにすべきである。 – Nick

+0

これらのすべては、setFilter http:// docによって設定可能である。 qt.io/qt-5/qdir.html#Filter-enum。 rootPathとルート項目を設定すると、選択したフォルダがルートオブジェクトになります。私のポストをもう一度読んでください。あなたはこれを見ることができます。これは私のプロジェクトで常に使用しているものです。ここで私が使用している古いプログラムの例を示します:https://i.gyazo.com/1bf1c355802546d6001c5633205b3460.pngこれはディレクトリの内容です – mrg95

+0

これはまだ実装されていますか?これはあなたの後ろに行く正しい方法でしょう。もしそうなら、私の答えを受け入れてください。 – mrg95

関連する問題