2017-08-17 4 views
1

Mit dem folgenden Code kann ich alle Dateinamen in einem bestimmten Ordner erhalten. Jetzt möchte ich die Dateinamen anzeigen, die in den QT Widgets wie qlinedit oder qtextedit oder qstringlist erhalten werden. Wie soll ich das machen?Drucken von Dateinamen in einem bestimmten Ordner mit einem beliebigen QT-Widget

@ 
    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

Ihre Schleife wird in 1 ms beendet und der Benutzer kann keine Änderungen sehen, nur die letzte Nummer. – aghilpro

+0

@aghilpro Ich habe meine Anfrage mit Code aktualisiert. Bitte senden Sie mir eine Lösung so schnell wie möglich! – annie

Antwort

1

Es gibt eine bessere Lösung zum Anzeigen des Verzeichnisses auf der Benutzeroberfläche.

Sie können QDirModel verwenden, um alle Verzeichnis zu bekommen und es in TreeView zeigen:

CPP-Datei:

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

#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 

auch herunterladen Probe App here

Weitere Informationen:

Die Klasse QDir bietet Zugriff auf Verzeichnisstrukturen und deren Inhalt.

Die Klasse QDirModel bietet ein Datenmodell für das lokale Dateisystem.

+0

Ich habe die Situation, mit der ich konfrontiert bin, in den Antwortabschnitt aufgenommen. Schlage mir eine Lösung dafür vor. – annie

+0

Ich habe die Zeile zu QModelIndex ModelIndex = QDirModelObj-> index ("D: \ Dokumente \ Qt docs \") geändert; aber es zeigt immer noch das gleiche Hauptfenster – annie

+1

@annie Sie müssen Slash '/' oder zwei Backslash '\\' verwenden. Ihr Verzeichnis wird wie folgt aussehen: 'D: \\ Dokumente \\ Qt docs' – aghilpro

Verwandte Themen