2017-12-18 73 views
-1

まず、複数のイメージを格納するフォルダがあるとします。その後、UIのボタンをクリックしてフォルダを開き、そのフォルダ内の画像のすべてのファイルパスをQList(フィルタリングされた画像ファイルのみ)に保存しようとします。しかし、QListは何も格納しません。助けてください。QTでQFileSystemModelからファイルパスを取得する方法(C++)

+0

あなたはQtのドキュメントを読む必要があります:http://doc.qt.io/qt-5/qfilesystemmodel.html#details –

+0

@ md612それにはなぜ 'QFileSystemModel'を使用していますか? –

+0

@Dmitry Sazonov QtreeView – md612

答えて

1

QDir::entryList()を適切なフィルタで代わりに使用すると、意図した目的を達成し、コードとオーバーヘッドを大幅に削減できます。

+0

これは便利な答えです。OPが、ツリービューを作成するためのアイテムモデルが必要であることを示していることだけです。そして、質問はなぜ 'QFileSystemModel'がリストを埋めるために働かないのかということでした。まあまあ...:P –

1
void MainWindow::on_pushButton_clicked() 
{ 
    QString dir = QFileDialog::getExistingDirectory(this, tr("Open Directory"), 
               "/home", 
               QFileDialog::ShowDirsOnly 
               | QFileDialog::DontResolveSymlinks); 
    model = new QFileSystemModel(); 
    filesPath = dir; 
    model->setRootPath(dir); 
    QStringList filter; 
    filter <<"*.png" <<"*.jpg" <<"*.bmp" <<"*.gif"; 
    model->setNameFilters(filter); 
    model->setNameFilterDisables(false); 

    ui->treeView->setModel(model); 
    ui->treeView->setRootIndex(model->index(dir)); 
    ui->treeView->setAnimated(false); 
    ui->treeView->setSortingEnabled(true); 

    QList<QString> path_list; 
    QModelIndex parentIndex = model->index(dir); 
    int numRows = model->rowCount(parentIndex); 

    for (int row = 0; row < numRows; ++row) { 
     QModelIndex childIndex = model->index(row, 0, parentIndex); 
     QString path = model->data(childIndex).toString(); 
     if(!QFileInfo(path).isDir()) 
      path_list.append(path); 
    } 
} 

コメント欄で述べたように、QFileSystemModelは、そのように使用されるように設計されていませんでした。ここで重要なのは、あなたが(強調鉱山)に指摘されたドキュメントである:

QDirModel、QFileSystemModelは、それがファイルシステムとしてハングアップするためにメインスレッドが照会されることはありませんので、自分自身を移入するために別のスレッドを使用していますとは異なり、 。 rowCount()を呼び出すと、モデルによってディレクトリが生成されるまで0が返されます。

どうしてもリストを構築するためにQFileSystemModelを使用したい場合は、あなたがdirectoryLoaded(const QString &path)信号に関数を接続し、それがロードされた後、各フォルダ内のファイルを追加する必要があるだろう...しかし、多くは、おそらくありますあなたが必要とするものを達成するためのよりよい方法。

関連する問題