FileDialog 是 Qt 框架中专门用于文件 / 目录选择的标准对话框类
函数原型:
c
QString QFileDialog::getOpenFileName(
QWidget *parent = nullptr, // 父窗口
const QString &caption = QString(), // 对话框标题
const QString &dir = QString(), // 默认打开的目录
const QString &filter = QString(), // 文件类型过滤器
QString *selectedFilter = nullptr, // 输出:用户选中的过滤器 可选
Options options = Options() // 对话框行为选项 可选
)
ui:
创建 btn_read和write两个按钮
widget.h
c
#include <QMessageBox> // 消息提示框(错误/成功提示)
#include <QDebug> // 控制台打印
#include <QDateTime>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
void onCreatFile();
private slots:
void on_btn_read_clicked();
void on_btn_write_clicked();
private:
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
widget.cpp
c
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
onCreatFile();
}
Widget::~Widget()
{
delete ui;
}
void Widget::onCreatFile()
{
//程序起来去创建.txt文本
QFile file("D:/Qt_project/49_QFiledailog/test.txt");
if(!file.exists())
{
file.open(QIODevice::NewOnly | QIODevice::Text);
}
}
void Widget::on_btn_read_clicked()
{
//打开文件保存对话框,获取文件保存路径
QString filePath = QFileDialog::getOpenFileName(this,"选择文件打开位置","D:/Qt_project/49_QFiledailog","文本文件(*.txt);;所以文件(*.*)");
//判断用户是否取消
if(filePath.isEmpty())
{
QMessageBox::information(this,"提示","你取消了打开文件");
return;
}
//初始化文件对象
QFile file(filePath);
if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
{
QMessageBox::critical(this,"错误","文件打开失败:"+file.errorString());
return;
}
QTextStream in(&file);
in.setCodec("UTF-8");
QString writeContent;
//读取文件
//判断是否到文件尾部
while(!in.atEnd())
{
//按行读取文件
QString txtcontext = in.readLine();
qDebug()<<txtcontext;
}
file.close();
qDebug()<<"文件写入成功,保存路径:"<<filePath;
QMessageBox::information(this,"读取成功","文件保存至: \n" + filePath);
}
void Widget::on_btn_write_clicked()
{
//打开文件保存对话框,获取文件保存路径
QString savePath = QFileDialog::getOpenFileName(this,"选择文件保存位置","D:/Qt_project/49_QFiledailog","文本文件(*.txt);;所以文件(*.*)");
//判断用户是否取消
if(savePath.isEmpty())
{
QMessageBox::information(this,"提示","你取消了文件保存");
return;
}
//初始化文件对象
QFile file(savePath);
if(!file.open(QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text))
{
QMessageBox::critical(this,"错误","文件打开失败:"+file.errorString());
return;
}
QTextStream out(&file);
out.setCodec("UTF-8");
QString writeContent = "QFileDailog 读写测试\n";
writeContent += "当前时间:" + QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss")+ "\n";
writeContent += "你好 ! Qt !";
//写入文件
out<<writeContent;
file.close();
qDebug()<<"文件写入成功,保存路径:"<<savePath;
QMessageBox::information(this,"写入成功","文件保存至: \n" + savePath);
}