使用任何 QT 小部件打印特定文件夹中的文件名
Printing filenames in a specific folder using any QT widget
使用下面的代码,我能够获取特定文件夹中的所有文件名。现在我想显示在 QT 小部件中获得的文件名,如 qlinedit
或 qtextedit
或 qstringlist
。我应该怎么做?
@
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;
}
}
@
在UI上显示磁盘目录有更好的解决方案。
您可以使用 QDirModel 获取所有目录并在 treeView 中显示:
.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
更多信息:
QDir class 提供对目录结构及其内容的访问。
QDirModel class 为本地文件系统提供数据模型。
使用下面的代码,我能够获取特定文件夹中的所有文件名。现在我想显示在 QT 小部件中获得的文件名,如 qlinedit
或 qtextedit
或 qstringlist
。我应该怎么做?
@
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;
}
}
@
在UI上显示磁盘目录有更好的解决方案。
您可以使用 QDirModel 获取所有目录并在 treeView 中显示:
.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
更多信息:
QDir class 提供对目录结构及其内容的访问。
QDirModel class 为本地文件系统提供数据模型。