所谓标准对话框,其实就是 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 !然后运行一下!点击打开按钮,就会弹出打开对话框,然后选择文件或者直接点击取消,会有相应的消息提示。

运行效果


写法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

Qt学习笔记-5-Qt标准对话框之QFileDialog相关推荐

  1. Qt学习笔记,Qt国际化

    Qt学习笔记,Qt国际化 Qt国际化步骤: 第一步:设置.pro文件,加入TRANSLATIONS为国际化做准备 TRANSLATIONS = language/language_en.ts\     ...

  2. Qt学习笔记,Qt程序架构设计要旨

    Qt学习笔记,Qt程序架构设计要旨 时间过得很快,转眼学习Qt已经有一个多月了,对Qt的学习也在不断的深入中.自己手下的code也很多了,不过不得不说,还有很多的部分没有接触过,比如网络编程,2D,3 ...

  3. ubuntu 中的qt怎么调用graphics.h_Qt 标准对话框之 QFileDialog

    Qt 标准对话框之 QFileDialog <Qt 学习之路>已经写到了第15篇,然而现在再写下去却有点困难,原因是当初并没有想到会连续的写下去,因此并没有很好的计划这些内容究竟该怎样去写 ...

  4. Qt学习笔记(Qt制作菜单栏and工具栏and状态栏)^_^

    本人是菜鸟,这里记录的每天的学习内容 学习Qt 的第四天(笑着学) 学习内容: 1)编写一个菜单栏 and 工具栏 and 状态栏                                    ...

  5. Qt学习笔记之Qt软件的打包发布

    在QT编程结束之后,我们会运行程序,这个过程结束后会在你工程的父目录中出现一个build-simpleEditor-unknown-Debug的文件夹,其中build之后的名称就是你工程的名称.在这个 ...

  6. Qt学习笔记之--Qt内置图标一览表

    Qt内置了一批图标,一共有70个(Qt 5.9.5),不同的平台图标有差异.由于官方文档中只有描述没有图示,所以写个Demo把这些图标全部显示出来.下面展示了windows.Linux.android ...

  7. QT学习笔记(1): Qt的线程安全和可重用性

    原来觉得对线程安全是比较了解的,可是今天看了Nokia Developer中的Reentrancy and Thread-safty之后,发现还有有些概念没有很清楚.所以在此留点痕迹好了. 首先两个英 ...

  8. QT学习笔记(摘抄)

    QT学习笔记-1.QT主要的对象 说来惭愧学习c++很长时间了一直没有使用c++开发过软件界面 所以现在想认认真真的学习一个c++图形界面框架库 本来想学习Xwidget但是这个资料不大好找 有啥问题 ...

  9. QT学习笔记(五):Qt5的8种标准对话框示例

    QT学习笔记(五):Qt5的8种标准对话框示例 前言 实例展示 1.颜色对话框 2.文件对话框 3.字体对话框 4.输入对话框 5.消息对框 6.进度对话框 7.错误信息对话框 8.向导对话框. 前言 ...

  10. QT学习笔记之对话框

    QT学习笔记之对话框 对话框是一种用户界面(窗口),它的主要功能是输出信息和接收用户的输入.在每个对话框内一般都有一些控件,对话框依靠这些控件与用户进行交互. 1)       模式对话框:用户只能与 ...

最新文章

  1. oracle服务端用sql查看连接到数据库的IP
  2. 【阿里云API】 阿里云API调用的若干说明
  3. 消息转为文本函数('MESSAGE_TEXT_BUILD')
  4. js实现网页防止被iframe框架嵌套及几种location.href的区别
  5. leetcode 232. 用栈实现队列 思考分析
  6. OpenStack推出最新版本Newton,显著提升单一云平台 对虚拟化、裸机和容器的管理...
  7. LeetCode-1两数之和
  8. java 设置月份_java – 为什么Calendar.JUNE将月份设置为7月?
  9. async和await浅析
  10. linux db2下载地址,请置顶:DB2 Developer Workbench下载地址
  11. 中科大 EPC课程 爬虫(最新,效果良好)
  12. ug西门子840d后处理教程_UG后处理制作教程.pdf
  13. u盘内存怎么测试软件,怎么使用U盘启动盘进行内存测试?电脑内存测试工具使用方法...
  14. Java Swing
  15. Git Clone命令直接使用用户名密码Clone
  16. R6034错误的解决(转)
  17. 计算机和网络设备的辐射强,计算机网络设备信息辐射泄漏与抑制
  18. SPI的4种采样模式
  19. 神经学家探寻:机器如何拥有意识!
  20. 怎么去除广告(百度推广,阿里妈妈推广等)

热门文章

  1. 深入理解计算机系统—计算机系统漫游1.1
  2. mkdir命令 – 创建目录
  3. Deepin20.9 在线安装qt6.5.1
  4. 数位屏不知道买哪款?绘王新款Kamvas Pro 13数位屏开箱
  5. BGP十三条选路原则、路由反射器
  6. ubuntu下的一些常用软件游戏
  7. 荣耀9i 鸿蒙,荣耀9i和荣耀9青春版哪个好 哪个性价比更高?
  8. 计算机教师应用心得体会,教师浅谈信息技术应用体验心得体会
  9. 计算机学校班干部竞选演讲稿,大学生班干部竞选演讲稿(通用5篇)
  10. 配置Maven项目本地仓库和远程镜像