3.4
文件选择对话框
QFileDialog
3.4.1 QFileDialog
开发流程
使用
QFileDialog
的基本步骤通常如下:
实例化
:首先,创建一个
QFileDialog
对象的实例。
QFileDialog qFileDialog;
设置模式
:根据需要设置对话框的模式,如打开文件、保存文件等。
qFileDialog.setFileMode(QFileDialog::ExistingFiles);
设置过滤器
:如果需要,可以设置文件类型过滤器,以限制用户可以选择的文件类型。
qFileDialog.setNameFilter("Text files (*.txt *.doc )");
显示对话框
:通过调用
exec()
方法显示对话框,并在用户作出选择后执行相应的操作。
if(qFileDialog.exec()) { // 获取用户选中的文件列表 QStringList fileName = qFileDialog.selectedFiles(); //显示打开的文件名及文件地址 // 遍历列表并处理每个文件 for(QString str : fileName) { qDebug() << str; } }
通过
selectedFiles
方法获取用户选择的文件路径列表,然后对这些文件进行相应的处理。
这是使用
QFileDialog
的基本模式。
Qt
也允许使用静态方法直接创建和显示对话框,例如
QFileDialog::getOpenFileName()
,这些方法更简单,但提供的自定义选项较少。
3.4.2 QFileDialog
打开开发案例
#include "widget.h" #include "ui_widget.h"
#include <QFileDialog> #include <QDebug> Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this); } Widget::~Widget() { delete ui; } /* 打开文件 */ void Widget::on_btnOpenselect_clicked() { /*QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"), "D:/Embedded_learning/03.QT_Codeinlesson/build-P3_4_QFile_OpenDesktop_Qt_5_12_9_MinGW_64_bit-Debug", tr("Text files (*.txt *.doc )")); //*文件打开*/ // 创建一个 QFileDialog 实例 QFileDialog qFileDialog; // 设置对话框为打开文件模式 qFileDialog.setFileMode(QFileDialog::ExistingFiles); //可以多文件打开 // 设置文件过滤器 qFileDialog.setNameFilter("Text files (*.txt *.doc )"); //文件选择框的文件形式 // 显示对话框 if(qFileDialog.exec()) { // 获取用户选中的文件列表 QStringList fileName = qFileDialog.selectedFiles(); //显示打开的文件名及文件地址 // 遍历列表并处理每个文件 for(QString str : fileName) { qDebug() << str; // 1.打开文件 QFile file; file.setFileName(str); if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) { qDebug() << "file open error"; } // 2.读取文件 QTextStream in(&file); /* 多态,将子类进行联系 */ in.setCodec("UTF-8"); //QString context = in.read(file.size()); while(!file.atEnd()) { QString context = in.readLine(); qDebug() << context; } // 3.输出文件及关闭 file.close(); } } }
3.4.3 QFileDialog
保存开发案例
#include "widget.h" #include "ui_widget.h" #include <QFileDialog> #include <QDebug> Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this); } Widget::~Widget() { delete ui; } /* 保存文件 */ void Widget::on_btnDialogSave_clicked() { /*保存文件名,文件格式,文件地址*/ QString fileName = QFileDialog::getSaveFileName(this, tr("Save File"), "D:/Embedded_learning/03.QT_Codeinlesson/build P3_4_QFile_Open-Desktop_Qt_5_12_9_MinGW_64_bit-Debug", tr("Text files (*.txt *.doc )")); qDebug() << fileName; /*写入文件内容*/ // 1.打开 QFile file; file.setFileName(fileName); if(!file.open(QIODevice::WriteOnly | QIODevice::Text)) { qDebug() << "file open error"; } // 2.写入 QTextStream out(&file); out.setCodec("UTF-8"); out << "Write Dialog From The File"; // 3.关闭 file.close(); }