QFileDialog 对话框类
QFileDialog 对话框类是 QDialog 类的子类, 通过这个类可以选择要打开/保存的文件或者目录。关于这个类我们只需要掌握一些静态方法的使用就可以了。
/*
通用参数:
- parent: 当前对话框窗口的父对象也就是父窗口
- caption: 当前对话框窗口的标题
- dir: 当前对话框窗口打开的默认目录
- options: 当前对话框窗口的一些可选项,枚举类型, 一般不需要进行设置, 使用默认值即可
- filter: 过滤器, 在对话框中只显示满足条件的文件, 可以指定多个过滤器, 使用 ;; 分隔
- 样式举例:
- Images (*.png *.jpg)
- Images (*.png *.jpg);;Text files (*.txt)
- selectedFilter: 如果指定了多个过滤器, 通过该参数指定默认使用哪一个, 不指定默认使用第一个过滤器
*/
// 打开一个目录, 得到这个目录的绝对路径
[static] QString QFileDialog::getExistingDirectory(
QWidget *parent = nullptr,
const QString &caption = QString(),
const QString &dir = QString(),
QFileDialog::Options options = ShowDirsOnly);
// 打开一个文件, 得到这个文件的绝对路径
[static] QString QFileDialog::getOpenFileName(
QWidget *parent = nullptr,
const QString &caption = QString(),
const QString &dir = QString(),
const QString &filter = QString(),
QString *selectedFilter = nullptr,
QFileDialog::Options options = Options());
// 打开多个文件, 得到这多个文件的绝对路径
[static] QStringList QFileDialog::getOpenFileNames(
QWidget *parent = nullptr,
const QString &caption = QString(),
const QString &dir = QString(),
const QString &filter = QString(),
QString *selectedFilter = nullptr,
QFileDialog::Options options = Options());
// 打开一个目录, 使用这个目录来保存指定的文件
[static] QString QFileDialog::getSaveFileName(
QWidget *parent = nullptr,
const QString &caption = QString(),
const QString &dir = QString(),
const QString &filter = QString(),
QString *selectedFilter = nullptr,
QFileDialog::Options options = Options());
例子:
- 打开本地目录
void MainWindow::on_filedlg_clicked()
{
QString dirName = QFileDialog::getExistingDirectory(
this,
"打开文件",
"E://BaiduNetdiskDownload");
QMessageBox::information(this, "打开目录", "您选择的目录是: " + dirName);
}
运行效果:
- 打开一个本地文件
selectedFilter: 如果指定了多个过滤器, 通过该参数指定默认使用哪一个, 不指定默认使用第一个过滤器
void MainWindow::on_filedlg_2_clicked()
{
QString arg("Text files (*.txt)");
QString fileName = QFileDialog::getOpenFileName(
this, "Open File", "E://BaiduNetdiskDownload",
"Images (*.png *.jpg);;Text files (*.txt)");
QMessageBox::information(this, "打开文件", "您选择的文件是: " + fileName);
}
void MainWindow::on_filedlg_2_clicked()
{
QString arg("Text files (*.txt)");
QString fileName = QFileDialog::getOpenFileName(
this, "Open File", "E://BaiduNetdiskDownload",
"Images (*.png *.jpg);;Text files (*.txt)", &arg);
QMessageBox::information(this, "打开文件", "您选择的文件是: " + fileName);
}
void MainWindow::on_filedlg_2_clicked()
{
QString arg("Text files (*.txt *.doc)");
QString fileName = QFileDialog::getOpenFileName(
this, "Open File", "E://BaiduNetdiskDownload",
"Images (*.png *.jpg);;Text files (*.txt *.doc)", &arg);
QMessageBox::information(this, "打开文件", "您选择的文件是: " + fileName);
}
最终打开为:
- 打开多个本地文件
就是使用了字符串拼接
void MainWindow::on_filedlg_3_clicked()
{
QStringList fileNames = QFileDialog::getOpenFileNames(
this, "Open File", "e:\\temp",
"Images (*.png *.jpg);;Text files (*.txt)");
QString names;
for(int i=0; i<fileNames.size(); ++i)
{
names += fileNames.at(i) + " ";
}
QMessageBox::information(this, "打开文件(s)", "您选择的文件是: " + names);
}
- 打开保存文件对话框
void MainWindow::on_filedlg_4_clicked()
{
QString fileName = QFileDialog::getSaveFileName(this, "保存文件", "E://BaiduNetdiskDownload");
QMessageBox::information(this, "保存文件", "您指定的保存数据的文件是: " + fileName);
}