QFileDialog
类是 Qt 框架中用于处理文件对话框的一个类,它继承自 QDialog
。QFileDialog
提供了标准的文件选择对话框,使用户能够选择文件或目录。这个类可以用于打开或保存文件,也可以用来选择目录。
主要功能
- 打开和保存文件:
QFileDialog
提供了调用标准打开文件对话框和保存文件对话框的方法,使用户可以浏览文件系统,并且选择需要打开或保存的文件。 - 目录选择:除了文件选择,
QFileDialog
还能够用于选择文件夹,对于需要用户指定工作目录等场景非常有用。 - 过滤器:可以设置文件类型过滤器,仅显示对话框中符合特定模式的文件或目录,提高了用户体验。
- 视图模式:支持不同的文件视图模式和排序方式,用户可以根据需要调整。
主要方法
getOpenFileName()
、getOpenFileNames()
:弹出对话框让用户选择一个或多个要打开的文件。getSaveFileName()
:弹出对话框让用户选择要保存文件的路径和文件名。getExistingDirectory()
:弹出对话框让用户选择一个目录。setNameFilter()
:设置对话框显示的文件过滤器,例如仅显示特定扩展名的文件。setViewMode()
:设置在对话框中文件的显示方式,如列表或详细列表。
示例代码
#include <QFileDialog>
#include <QDebug>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
// 打开文件对话框选择一个文件
QString fileName = QFileDialog::getOpenFileName(nullptr,
"Open Image", "/home/user",
"Image Files (*.png *.jpg *.bmp)");
qDebug() << "Selected file:" << fileName;
// 打开对话框选择一个保存文件的位置
QString saveFileName = QFileDialog::getSaveFileName(nullptr,
"Save File", "/home/user",
"Text Files (*.txt)");
qDebug() << "Save file path:" << saveFileName;
return app.exec();
}
这个示例演示了如何使用 QFileDialog
弹出打开文件和保存文件的对话框,以及如何应用文件类型过滤器。
示例代码myself
//简单粗暴用getOpenFileName操作文件选择对话框
void Widget::on_btnFileDialog_clicked()
{
//选择需要打开的文件和文件的类型。弹出一个框(单个)
QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"),
"D:/c++QT/lessonDemo/noteBookProject",
tr("Text files (*.txt *.doc)"));
qDebug() <<fileName;
//打开文本文件
QFile file(fileName);
if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){
qDebug()<<"open error";
}
//读取
QTextStream in(&file);
in.setCodec("UTF-8");
//QString context = in.read(file.size());方法一:按照大小整个读
//方法二:如果没到尾部,一行一行的读。
while(!in.atEnd()){
QString context = in.readLine();
qDebug() << context;
qDebug() << "=============";
//std::cout <<"=========="<<std::endl;
}
//关闭
file.close();
}
//分步骤操作文件选择对话框
void Widget::on_btnFDStep_clicked()
{
QFileDialog dialog;
//打开已经存在的所有文件
dialog.setFileMode(QFileDialog::ExistingFiles);
dialog.setNameFilter("*.txt");
dialog.exec();
//选择多个文件,遍历出来(数组)
QStringList qstrings = dialog.selectedFiles();
for(QString str : qstrings){
qDebug() << str;
}
}
//另存为文件。和写入文件一个逻辑
void Widget::on_btnSave_clicked()
{
QString fileName = QFileDialog::getSaveFileName(this, tr("Save File"),
"D:/c++QT/lessonDemo/noteBookProject/untitled.txt",
tr("Text (*.txt)"));
qDebug()<< fileName;
//写入文件
QFile file(fileName);
if(!file.open(QIODevice::WriteOnly | QIODevice::Text)){
qDebug()<<"open error";
}
QTextStream out(&file);
out.setCodec("UTF-8");
out << "QDialog Write" ;
file.close();
}
打开单个文件
打开多个文件,数组遍历
另存为文件
结论
QFileDialog
是 Qt 中一个非常方便的工具,它使得与用户互动选择文件或目录的任务变得既标准化又简单。通过预定义的静态方法可以快速弹出对话框,并根据用户选择返回所需的文件路径或者目录,极大地简化了文件选择相关的编码工作。