2017-08-17 75 views
1

使用下面的代码,我可以获取特定文件夹中的所有文件名。现在我想要显示在QT小部件中获得的文件名,例如qlineditqtexteditqstringlist。我该怎么做?使用任何QT小部件打印特定文件夹中的文件名

@ 
    QFileDialog dialog; 
    dialog.setFileMode(QFileDialog::Directory); 
    dialog.setOption(QFileDialog::DontUseNativeDialog,true); 
    dialog.setOption(QFileDialog::DontResolveSymlinks); 
    dialog.setNameFilterDetailsVisible(true); 
    dialog.setViewMode(QFileDialog::Detail); 
    QStringList filters; 
    filters <<"Any files (*)"; 
    dialog.setOption(QFileDialog::HideNameFilterDetails,false); 
    dialog.setNameFilters(filters); 
    int res = dialog.exec(); 
    QDir directory; 
    QString file = directory.currentPath(); 

    if (res) 
    { 
     directory = dialog.selectedFiles()[0]; 
     QStringList filesList = directory.entryList(QDir::Files); 
     QString fileName; 

     foreach(fileName, filesList) 
     { 
      qDebug() << "FileName " << fileName; 
     } 
    } 
@ 
+1

您的循环将在1 ms内完成,用户无法看到更改,只显示最后一个数字。 – aghilpro

+0

@aghilpro我用代码更新了我的questiion。请尽快给我一个解决方案! – annie

回答

1

在UI上显示磁盘目录有更好的解决方案。

您可以使用QDirModel让所有的目录,并显示在树形视图:

.cpp文件:

#include "mainwindow.h" 
#include "ui_mainwindow.h" 

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

    QModelIndex ModelIndex = QDirModelObj->index("F:/"); 

    ui->treeView->expand(ModelIndex); 
    ui->treeView->scrollTo(ModelIndex); 
    ui->treeView->setCurrentIndex(ModelIndex); 
    ui->treeView->resizeColumnToContents(0); 
    timer = new QTimer; 
    connect(timer, SIGNAL(timeout()), this, SLOT(loadDirecory())); 
    timer->start(10000); // Update every 10 sec 
} 

void MainWindow::loadDirecory() 
{ 
    QDirModelObj->setReadOnly(false); 
    QDirModelObj->setSorting(QDir::DirsFirst | QDir::IgnoreCase | QDir::Name); 
    ui->treeView->setModel(QDirModelObj); 
} 

MainWindow::~MainWindow() 
{ 
    delete ui; 
} 

.h文件中:

#ifndef MAINWINDOW_H 
#define MAINWINDOW_H 

#include <QMainWindow> 
#include <QDirModel> 
#include <QInputDialog> 
#include <QTimer> 
#include <QDebug> 

namespace Ui { 
class MainWindow; 
} 

class MainWindow : public QMainWindow 
{ 
    Q_OBJECT 

public: 
    explicit MainWindow(QWidget *parent = 0); 
    ~MainWindow(); 

public slots: 
    void loadDirecory(); 

private: 
    Ui::MainWindow *ui; 
    QDirModel *QDirModelObj; 
    QTimer *timer; 

}; 

#endif // MAINWINDOW_H 

而且下载示例应用程序here

更多信息:

QDir类提供对目录结构及其内容的访问。

QDirModel类为本地文件系统提供数据模型。

+0

我在回答部分包含了我正面临的情况。建议我一个解决方案。 – annie

+0

我已将该行修改为QModelIndex ModelIndex = QDirModelObj-> index(“D:\ Documents \ Qt docs \”);但它仍然显示相同的主窗口 – annie

+1

@annie您必须使用斜杠'/'或两个反斜杠'\\'。您的目录将如下所示:'D:\\ Documents \\ Qt文档' – aghilpro

相关问题