文档章节

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

小代码2016
 小代码2016
发布于 2015/05/27 15:28
字数 1194
阅读 15
收藏 0
《Qt学习之路》已经写到了第15篇,然而现在再写下去却有点困难,原因是当初并没有想到会连续的写下去,因此并没有很好的计 划这些内容究竟该怎样去写。虽然前面说过,本教程主要线路参考《C++ Gui Programming with Qt 4, 2nd Edition》,然而最近的章节由于原文是一个比较完整的项目而有所改变,因此现在不知道该从何写起。
 
我并不打算介绍很多组件的使用,因为Qt有很多组件,各种组件用法众多,根本不可能介绍完,只能把API放在手边,边用边查。所以,对于很多组件我只是简单的介绍一下,具体用法还请自行查找(确切地说,我知道的也并不多,很多时候还是要到API里面去找)。
 
下面还是按照我们的进度,从Qt的标准对话框开始说起。所谓标准对话框,其实就是Qt内置的一些对话框,比如文件选择、颜色选择等等。今天首先介绍一下QFileDialog。
 
QFileDialog是Qt中用于文件打开和保存的对话框,相当于Swing里面的JFileChooser。下面打开我们前面使用的工程。 我们已经很有先见之明的写好了一个打开的action,还记得前面的代码吗?当时,我们只是弹出了一个消息对话框(这也是一种标准对话框哦~)用于告知这 个信号槽已经联通,现在我们要写真正的打开代码了!
 
修改MainWindow的open函数:
 
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哦!然后运行一下吧!点击打开按钮,就会弹出打开对话框,然后选择文件或者直接点击取消,会有相应的消息提示。
 
QFileDialog提供了很多静态函数,用于获取用户选择的文件。这里我们使用的是getOpenFileName(), 也就是“获取打开文件名”,你也可以查看API找到更多的函数使用。不过,这个函数的参数蛮长的,而且类型都是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)。
 
为了说明QFileDialog::getOpenFileName()函数的用法,还是先把函数签名放在这里:
 
QString 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。

本文出自 “豆子空间” 博客,请务必保留此出处http://devbean.blog.51cto.com/448512/213414

本文转载自:http://devbean.blog.51cto.com/448512/213414

小代码2016
粉丝 46
博文 328
码字总数 153495
作品 0
安阳
程序员
私信 提问
QFileDialog的用法

Qt中 文件对话框QFileDialog 的使用 资料来源于Qt官方文档,我总结了其中常用到的部分: 一. 最简单的方法是调用静态函数来对话框获取文件: QString file = QFileDialog::getOpenFileName( "/...

晨曦之光
2012/04/13
2.5K
0
QT5: QFileDialog

QFileDialog是一个非常方便的类能够让我们打开一个对话框通过该对话框选择文件其中有两个非常重要的函数: 1,static QString QFileDialog::getOpenFileName(); static QString QFileDialog::...

SHIHUAMarryMe
2016/04/01
292
0
有关QFileDialog的问题

求教:我通过Qt Creator实现的程序,通过一个按钮点击打开一个QFileDialog类的对话框,在关闭此文件对话框,关闭主窗口后,在任务管理器中依然能看到这个程序。为什么呢??...

brighton
2012/11/27
91
0
关闭QFileDialog时报错,打开文件的方式不对吗?

开发环境: Python3.5+Qt Designer+PyQt5+PyChram 先用Qt Design 绘制一个Dialog窗口,添加了一个pushButton,保存ui,用pyuic5将ui转成ui_dialog.py,其代码如下: 把ui_dialog.py一起拷贝到...

hawkingyy
2017/03/08
401
1
PyQt5系列教程(11):今天的消息挺全哦!

上期我们补充学习了QFileDialog以及打印文件相关的对话框。 这次我们再学习下消息对话框。 今天完成后的效果就是这样的: 下面我们还是和以往一样,按照代码来进行讲解。 消息对话框主要涉及...

我想飞
2017/09/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

关于AsyncTask的onPostExcute方法是否会在Activity重建过程中调用的问题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/XG1057415595/article/details/86774575 假设下面一种情况...

shzwork
今天
7
0
object 类中有哪些方法?

getClass(): 获取运行时类的对象 equals():判断其他对象是否与此对象相等 hashcode():返回该对象的哈希码值 toString():返回该对象的字符串表示 clone(): 创建并返此对象的一个副本 wait...

happywe
今天
6
0
Docker容器实战(七) - 容器中进程视野下的文件系统

前两文中,讲了Linux容器最基础的两种技术 Namespace 作用是“隔离”,它让应用进程只能看到该Namespace内的“世界” Cgroups 作用是“限制”,它给这个“世界”围上了一圈看不见的墙 这么一...

JavaEdge
今天
8
0
文件访问和共享的方法介绍

在上一篇文章中,你了解到文件有三个不同的权限集。拥有该文件的用户有一个集合,拥有该文件的组的成员有一个集合,然后最终一个集合适用于其他所有人。在长列表(ls -l)中这些权限使用符号...

老孟的Linux私房菜
今天
7
0
面试套路题目

作者:抱紧超越小姐姐 链接:https://www.nowcoder.com/discuss/309292?type=3 来源:牛客网 面试时候的潜台词 抱紧超越小姐姐 编辑于 2019-10-15 16:14:56APP内打开赞 3 | 收藏 4 | 回复24 ...

MtrS
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部