学习C++、QT---23(QT中QFileDialog库实现文件选择框打开、保存讲解)
每日一言
生活不会亏待认真对待它的人,越努力,越幸运。
QFileDialog文件选择框
现在我们来学习这个QFileDialog
我们的记事本肯定要用文件选择框来选择文件啊,就是我们记事本的这个功能
有 打开,取消,类似这样的一个文件选择框
那么我们怎么实现呢?
QT有一个叫做QFileDialog类,是用于做这个文件选择框的,那么使用方法的话,老样子我们去查看帮助文档
看看,我们就可以根据这个案例我们来进行仿写
首先我搞了三个QPushbutton
tr("Open File"),这个是文件选择框左上角的提示信息
"E:/qianrushi/QT/QTcodeLesson",这个是打开的路径
tr("Text (*.txt)"));这个右下角的过滤器,只让选择.txt文件,以提示信息Text
那么我们仿写上去之后,发现
虽然打开了文件选择框,但是选择文件后,直接关闭了,什么事都不做,于是我将fileName进行打印,发现,这个filename是文件的路径,那么根据我们之前的积累,会懂得,那么我们就进行文件的操作,利用QFile类和QTextStream进行将文件读取出来
但是别忘了哈,我们会发现如果出现了中文的乱码我们还是要进行编码的处理setcodec()
那么我们现在是去实现保存的功能
根据这个我们之前的这个打开的案例的印象
我们要去选择这个getSaveFileName这个就是官方给我们写好的案例,点击它
这个就是保存的案例
一样的,就是这个路径上面我们看到一个undefine.txt这个就是我们点击保存的时候默认的名字和后缀,下方有图
那么我们保存的话也是和打开是一样的,原理
现在,我们需要自己去学习这个Dialog,那就是不使用静态函数,自己进行创建一个Dialog,就像我们学习QFile一样也有案例
也都是在帮助文档里面
我们看不懂英文的话一定要像我一样去下载一个翻译器,这样好多了
那么我们根据官方的案例我们自己创建一个Dialog
都是根据案例走的,解释一下吧,首先我们创建了一个QFileDialog对象叫做qfileDialog ,调用这个setFileMode这个函数是为了通过调用这个函数让我们可以选择哪些文件,这边我们设置的是可以选择多个已存在的文件
这边我们选择的是Existing Files目的是到时候我们可以选择多个文件进行打开,和显示多个文件的内容
qfileDialog.setNameFilter("Text(*.txt)");这个就是过滤器了,设置为.txt才符合我们的记事本的特性
qfileDialog.exec()这个的话就是等于是运行这个文件选择框的作用,没有这句话,文件选择框就看不到
fileNames = qfileDialog.selectedFiles();
这个selectedFiles()函数返回的是文件路径列表,也就是我们选择了多个文件的话就会都放在列表里面,所以我们要是想要输出路径的话需要遍历列表,
现在这个fileNames就是QStringList类型
for(QString str : fileNames){
qDebug()<<str;
QFile file;
file.setFileName(str);
if(!file.open(QIODevice::ReadWrite|QIODevice::Text)){
qDebug()<< "open error";
}
QTextStream in(&file);
in.setCodec("UTF-8");
while(!in.atEnd()){
QString context = in.readLine();
qDebug()<<context;
}
}
}
涨知识:我们使用这个方法将文件的路径和内容都输出出来
这是 C++11 引入的范围 - based for 循环(Range-based for loop),在 Qt 框架中处理QStringList等容器时非常常用。它提供了一种简洁的语法来遍历容器中的每个元素。
for (类型 变量名 : 容器表达式) {
// 使用变量名访问当前元素}
}
继承关系
- QList<T>:是 Qt 的通用容器类,用于存储任意类型的对象(模板类)。
- QStringList:是 **QList<QString>** 的专用子类,专门用于存储字符串(QString)。
我们要牢牢记住