2016-11-23 10 views
1

특정 폴더의 파일 이름을 트리 위젯의 항목으로 출력 할 수 있어야하는 프로그램을 만들고 있습니다. 나는 그것을 알아낼 수 없습니다. 너무 많은 번거 로움없이 목록 위젯에서 처리했지만 트리 위젯으로 작업 할 수는 없습니다. 아래는 내가 목록 위젯폴더에서 파일 이름을 가져 와서 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

당신은 단순히 입력 목록을 반복하고 각 항목에 대한 QTreeWidgetItem 객체를 생성에 설명 된 기능을 얻기 위해 쓴 코드입니다.

부모로 트리 위젯을 전달하면 트리 위젯 항목이 부모로 전달되면 트리 위젯이 해당 항목의 하위 항목이됩니다.

+0

폴더의 항목 수가 무작위로 변경되면 작동합니까? – Nick

+0

@ 닉 아니, 내 대답에 설명했듯이. 제 대답은 형제가 될 수있는 방법입니다 :/ – mrg95

+0

@Nick 필요한 경우 언제든지 항목을 다시 작성할 수 있지만 mc360pro는 모델 기반 접근 방식을 사용하면이 작업을보다 잘 처리 할 수 ​​있다고 말했습니다. –

1

또 다른 옵션은 QFileSystemModel을 사용하고 setRootPath("your/path")을 사용하여 폴더 모델을 만드는 것입니다. setFilter()을 사용하여 표시된 내용을 결정할 수 있습니다. Filter List. 그러면 해당 모델을 QTreeView에 추가 할 수 있습니다. 훨씬 더 나은 성능을 가지며 대부분의 사용 사례에 대해 더 나은 옵션 인 것을 제외하고는 QTreeWidget과 같습니다. 예를 들어 파일이 해당 디렉토리에서 추가되거나 삭제되면 모델은 프로그램에서 변경되고 업데이트됩니다. QTreeWidget 할 수 없습니다. 당신은 그러나 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); 

, 당신은 재귀 적 폴더 내용을 반복하고 개별적으로 각 항목을 추가해야합니다.

+0

사용자가 프로그램에서 드라이브를 볼 수 없도록하려면 폴더와 그 안에있는 항목 만 볼 수 있어야합니다. – Nick

+0

이러한 모든 작업은 setFilter http : // doc을 통해 구성 할 수 있습니다. qt.io/qt-5/qdir.html#Filter-enum. rootPath와 루트 항목을 설정하면 선택한 폴더가 루트 객체가됩니다. 내 게시물을 다시 읽으십시오. 그러면이 게시물을 볼 수 있습니다. 이것이 내 프로젝트에서 항상 사용하는 것입니다. 다음은 이전 프로그램 중 하나에서 사용한 예입니다. https://i.gyazo.com/1bf1c355802546d6001c5633205b3460.png 이것은 디렉토리의 내용입니다. – mrg95

+0

아직 구현 했습니까? 이것은 네가 한 일을하는 올바른 길이다. 그렇다면 제 대답을 받아주십시오. – mrg95