Qt学习笔记-5-Qt标准对话框之QFileDialog

所谓标准对话框,其实就是 Qt 内置的一些对话框,比如文件选择、颜色选择等等。

QFileDialog 是 Qt 中用于文件打开和保存的对话框。

之前写的openAction只是弹出了一个消息对话框,用于告知这个信号槽已经联通,现在要写真正的打开代码了!

修改 MainWindow 的 open 函数:

写法1

//#include <QFileDialog>
void MainWindow::open() 
{ 
        QString path = QFileDialog::getOpenFileName(this, tr("Open Image"), ".", tr("Image Files(*.jpg *.png)")); 
        if(path.length() == 0) { 
                QMessageBox::information(NULL, tr("Path"), tr("You didn't select any files.")); 
        } else { 
                QMessageBox::information(NULL, tr("Path"), tr("You selected ") + path); 
        } 
}

编译之前要先include QFileDialog !然后运行一下!点击打开按钮,就会弹出打开对话框,然后选择文件或者直接点击取消,会有相应的消息提示。

运行效果

Qt学习笔记-5-Qt标准对话框之QFileDialog
Qt学习笔记-5-Qt标准对话框之QFileDialog

写法2

QFileDialog 提供了很多静态函数,用于获取用户选择的文件。这里我们使用的是 getOpenFileName(), 也就是“获取打开文件名”。不过,这个函数的参数蛮长的,而且类型都是 QString,并不好记。考虑到这种情况,Qt 提供了另外的写法:

QFileDialog *fileDialog = new QFileDialog(this); 
        fileDialog->setWindowTitle(tr("Open Image")); 
        fileDialog->setDirectory("."); 
        fileDialog->setFilter(tr("Image Files(*.jpg *.png)")); 

        if(fileDialog->exec() == QDialog::Accepted) { 
                QString path = fileDialog->selectedFiles()[0]; 
                QMessageBox::information(NULL, tr("Path"), tr("You selected ") + path); 
        } else { 
                QMessageBox::information(NULL, tr("Path"), tr("You didn't select any files.")); 
        }

不过,这两种写法虽然功能差别不大,但是弹出的对话框却并不一样。getOpenFileName()函数在Windows 和 MacOS X 平台上提供的是本地的对话框,而 QFileDialog 提供的始终是 Qt 自己绘制的对话框(还记得前面说过,Qt 的组件和 Swing 类似,也是自己绘制的,而不都是调用系统资源API)。

getOpenFileName()函数的用法

为了说明 QFileDialog::getOpenFileName()函数的用法,还是先把函数声明放在这里:

QString QFileDialog::getOpenFileName (
          QWidget * parent = 0, //用于指定父组件。注意,Qt组件构造函数都有个 parent 参数,并提供一个默认值0;
          const QString & caption = QString(),//对话框的标题
          const QString & dir = QString(),//对话框显示时默认打开的目录"."代表程序运行目录"/"代表盘符的根目录
          const QString & filter = QString(),//对话框的后缀名过滤器
          QString * selectedFilter = 0,//默认选择的过滤器
          Options options = 0 )//对话框的一些参数设定,比如只显示文件夹等等

第一个参数 parent,用于指定父组件。注意,很多 Qt 组件的构造函数都会有这么一个 parent 参数,并提供一个默认值0;

第二个参数 caption,是对话框的标题;

第三个参数 dir,是对话框显示时默认打开的目录,"." 代表程序运行目录,"/" 代表当前盘符的根目录(Windows,Linux下/就是根目录了),也可以是平台相关的,比如"C:"等;

第四个参数 filter,是对话框的后缀名过滤器,比如我们使用"Image Files(.jpg .png)“就让它只能显示后缀名是 jpg 或者 png 的文件。如果需要使用多个过滤器,使用”;;“分割,比如"JPEG Files(.jpg);;PNG Files(.png)”;

第五个参数 selectedFilter,是默认选择的过滤器;

第六个参数 options,是对话框的一些参数设定,比如只显示文件夹等等,它的取值是 enum QFileDialog::Option,每个选项可以使用 | 运算组合起来。

选择多个文件

如果我要想选择多个文件怎么办呢?Qt 提供了 getOpenFileNames()函数,其返回值是一个QStringList。你可以把它理解成一个只能存放 QString 的 List,也就是 STL 中的list。

好了,我们已经能够选择打开文件了。保存也是类似的,QFileDialog 类也提供了保存对话框的函数getSaveFileName

上一篇:P3373 【模板】线段树 2


下一篇:P3939 数颜色 —— 主席树简单变形