开发者社区> 科技小能手> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Qt学习之路(15): Qt标准对话框之QFileDialog

简介:
+关注继续查看
《Qt学习之路》已经写到了第15篇,然而现在再写下去却有点困难,原因是当初并没有想到会连续的写下去,因此并没有很好的计划这些内容究竟该怎样去写。虽然前面说过,本教程主要线路参考《C++ Gui Programming with Qt 4, 2nd Edition》,然而最近的章节由于原文是一个比较完整的项目而有所改变,因此现在不知道该从何写起。
 
我并不打算介绍很多组件的使用,因为Qt有很多组件,各种组件用法众多,根本不可能介绍完,只能把API放在手边,边用边查。所以,对于很多组件我只是简单的介绍一下,具体用法还请自行查找(确切地说,我知道的也并不多,很多时候还是要到API里面去找)。
 
下面还是按照我们的进度,从Qt的标准对话框开始说起。所谓标准对话框,其实就是Qt内置的一些对话框,比如文件选择、颜色选择等等。今天首先介绍一下QFileDialog。
 
QFileDialog是Qt中用于文件打开和保存的对话框,相当于Swing里面的JFileChooser。下面打开我们前面使用的工程。我们已经很有先见之明的写好了一个打开的action,还记得前面的代码吗?当时,我们只是弹出了一个消息对话框(这也是一种标准对话框哦~)用于告知这个信号槽已经联通,现在我们要写真正的打开代码了!
 
修改MainWindow的open函数:
 
InBlock.gifvoid MainWindow::open() 
InBlock.gif
InBlock.gif        QString path = QFileDialog::getOpenFileName(this, tr("Open Image"), ".", tr("Image Files(*.jpg *.png)")); 
InBlock.gif        if(path.length() == 0) { 
InBlock.gif                QMessageBox::information(NULL, tr("Path"), tr("You didn't select any files.")); 
InBlock.gif        } else { 
InBlock.gif                QMessageBox::information(NULL, tr("Path"), tr("You selected ") + path); 
InBlock.gif        } 
InBlock.gif}
 
编译之前别忘记include QFileDialog哦!然后运行一下吧!点击打开按钮,就会弹出打开对话框,然后选择文件或者直接点击取消,会有相应的消息提示。
 
QFileDialog提供了很多静态函数,用于获取用户选择的文件。这里我们使用的是getOpenFileName(), 也就是“获取打开文件名”,你也可以查看API找到更多的函数使用。不过,这个函数的参数蛮长的,而且类型都是QString,并不好记。考虑到这种情况,Qt提供了另外的写法:
 
InBlock.gif        QFileDialog *fileDialog = new QFileDialog(this); 
InBlock.gif        fileDialog->setWindowTitle(tr("Open Image")); 
InBlock.gif        fileDialog->setDirectory("."); 
InBlock.gif        fileDialog->setFilter(tr("Image Files(*.jpg *.png)")); 
InBlock.gif        if(fileDialog->exec() == QDialog::Accepted) { 
InBlock.gif                QString path = fileDialog->selectedFiles()[0]; 
InBlock.gif                QMessageBox::information(NULL, tr("Path"), tr("You selected ") + path); 
InBlock.gif        } else { 
InBlock.gif                QMessageBox::information(NULL, tr("Path"), tr("You didn't select any files.")); 
InBlock.gif        }
 
不过,这两种写法虽然功能差别不大,但是弹出的对话框却并不一样。getOpenFileName()函数在Windows和MacOS X平台上提供的是本地的对话框,而QFileDialog提供的始终是Qt自己绘制的对话框(还记得前面说过,Qt的组件和Swing类似,也是自己绘制的,而不都是调用系统资源API)。
 
为了说明QFileDialog::getOpenFileName()函数的用法,还是先把函数签名放在这里:
 
InBlock.gifQString QFileDialog::getOpenFileName (
          QWidget * 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<string>。
 
好了,我们已经能够选择打开文件了。保存也是类似的,QFileDialog类也提供了保存对话框的函数getSaveFileName,具体使用还是请查阅API。

本文转自 FinderCheng 51CTO博客,原文链接:http://blog.51cto.com/devbean/213414



版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
autojs-dialog对话框倒计时
牙叔教程 简单易懂
92 0
PyQt5 技术篇-调用字体对话框(QFontDialog)获取字体,控件设置字体。
PyQt5 技术篇-调用字体对话框(QFontDialog)获取字体,控件设置字体。
49 0
SAP Fiori里两种弹出对话框(popup dialog)设计
This blogs introduces the tips how to find the location of source code where the popup dialog is raised. There are two kinds of popup dialogs in Fiori ui.
55 0
SAP UI5 busy Dialog debug
# Created by Wang, Jerry, last modified on Jul 04, 2015
38 0
RadioButton单选按钮事件及AlertDialog弹出框的事件
一:安卓的单选按钮需要有一个容器来确定这组按钮的范围,而这个容器便是RadioGroup。 RadioGroup本质就是一个特殊的线性布局,只不过多了管理RadioButton按钮的功能而已,于是也提供orientation属性咯。
1124 0
C#的Winform中OpenFileDialog对话框Filter属性设置包含特定字符,使用正则表达式
OpenFileDialog对话框的Filter属性说明:          首先观察Filter属性的组成部分:“Word文件|*.doc ”,前面的“Word文件”成为标签,是一个可读的字符串,可以自定定义,“|*.doc”是筛选器,表示筛选文件夹中后缀名为.doc的文件,“*”表示匹配Word文件名称的字符串。
1671 0
SAP HUM 如何把HU号码与Outbound Delivery 解除Assignment?
SAP HUM 如何把HU号码与Outbound Delivery 解除Assignment? 比如如下交货单, 完成了WM层面的拣配,分配了2个HU号码。
1168 0
23703
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载