Search code examples
c++qtqt-creatorqtableviewqlineedit

Printing filenames in a specific folder using any QT widget


Using the below code, I am able to obtain all the filenames in a specific folder. Now I want to display the filenames obtained in of the QT widgets like qlinedit or qtextedit or qstringlist. how should I do it?

@
    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;
        }
    }
@

Solution

  • There is a better solution for showing disk directory on UI.

    You can use QDirModel to get all directory and show it in treeView:

    .cpp file:

    #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 file:

    #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
    

    More info:

    The QDir class provides access to directory structures and their contents.

    The QDirModel class provides a data model for the local filesystem.