Qt5.5 QFileDialog类的使用方法

来源:互联网 发布:mac看照片怎么下一张 编辑:程序博客网 时间:2024/06/06 12:27
 

Qt5.5 QFileDialog类的使用方法

 632人阅读 评论(0) 收藏 举报
 分类:

目录(?)[+]

头文件:#include <QFileDialog>Pro文件:Qt += widgets
  • 1
  • 2
  • 1
  • 2

使用QFileDialog有两种方法,一种是比较简单的使用“静态函数法”,另一种是可以自定义各个细节的“构造函数法”。

第一种:静态函数法

这里写图片描述

根据官方的说明文档,总共有8个静态函数可以使用,我们可以举个例子,如getOpenFileName这个静态函数:

#include <QApplication>#include <QFileDialog>#include <QDebug>#include <QString>int main(int argc, char *argv[]){    QApplication a(argc, argv);//括号里的参数分别是:指定父类、标题、默认打开后显示的目录、右下角的文件过滤器。    QString file_name = QFileDialog::getOpenFileName(NULL,"标题",".","*.txt");    qDebug() << file_name;    return a.exec();}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

这里需要注意下,最上头的是QApplication,不是QCoreApplication。运行结果如下: 
这里写图片描述

这里写图片描述

这样就可以获得所需文件的绝对路径,就可以配合QFile来操作文件了。

下面来看下这8个静态函数可以干什么用?

  • getExistingDirectory 只获取文件夹
QString file_name = QFileDialog::getExistingDirectory(NULL,"caption",".");qDebug() << file_name;
  • 1
  • 2
  • 1
  • 2

这里写图片描述

  • getExistingDirectoryUrl 
    和getExistingDirectory类似,功能也是获取文件夹路径,最大的区别在于参数里的路径是QUrl类型,这为用户提供了选择远程目录的能力。

  • getOpenFileName 获取本地文件 
    该静态函数已经在上面的例子中示范过使用方法,这里不再赘述。

  • getOpenFileUrl 获取远程文件 
    为用户提供了获取远程文件路径的能力

  • getOpenFileUrls 获取多个远程文件 
    可以得到多个远程文件路径

  • getOpenFileNames 获取多个本地文件

QStringList file_name = QFileDialog::getOpenFileNames(NULL,"标题",".","*.*");qDebug() << file_name.at(0);qDebug() << file_name.at(1);
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

这里写图片描述 
这里写图片描述

  • getSaveFileName 保存本地文件对话框

  • getSaveFileUrl 保存远程文件对话框


第二种:构造函数法-自定义细节

先构造一个QFileDialog对象:

QFileDialog fd;
  • 1
  • 1
  • 设置是打开还是保存文件对话框 AcceptMode(2个枚举)
fd.setAcceptMode(QFileDialog::AcceptOpen);//文件对话框为打开类型fd.setAcceptMode(QFileDialog::AcceptSave);//文件对话框为保存类型
  • 1
  • 2
  • 1
  • 2
  • 设置对话框显示信息的详细程度(2个枚举)
fd.setViewMode(QFileDialog::Detail);//详细fd.setViewMode(QFileDialog::List);//仅列表
  • 1
  • 2
  • 1
  • 2
  • 设置点击OK后,对话框返回什么(4个枚举)
fd.setFileMode(QFileDialog::AnyFile);//文件名,无论是否存在fd.setFileMode(QFileDialog::ExistingFile);//存在的,单个文件名fd.setFileMode(QFileDialog::Directory);//文件夹名fd.setFileMode(QFileDialog::ExistingFiles);//多文件
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4
  • 设置标题
fd.setWindowTitle("标题");
  • 1
  • 1
  • 设置默认后缀
fd.setDefaultSuffix("txt");
  • 1
  • 1

上面除了还有个Option没写以外,其他都是Properties,下面开始讲公共函数。

  • 获取对话框中的目录地址
QDir dir = fd.directory();qDebug() << dir;//如果要获取远程目录,则用QDir dir = fd.directoryUrl();
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

这里写图片描述 
这里写图片描述

  • 设置QDir::filter过滤器
fd.setFilter(QDir::AllDirs);qDebug() << fd.filter();
  • 1
  • 2
  • 1
  • 2

这里写图片描述

这里的QDir::filter过滤器和对话框右下角(*.txt)过滤器不一样,QDir::filter过滤器有16个枚举,如下:

ConstantValueDescriptionQDir::Dirs0x001列出匹配filters的目录QDir::AllDirs0x400列出所有目录QDir::Files0x002列出所有文件QDir::Drives0x004列出磁盘驱动器(Unix系统忽略)QDir::NoSymLinks0x008不列出符号连接QDir::NoDotAndDotDotNoDot or NoDotDot不列出特殊条目,如“.”或者“..”QDir::NoDot0x2000不列出“.”QDir::NoDotDot0x4000不列出“..”QDir::AllEntriesDirs\Files\Drives列出目录、驱动盘、符号连接QDir::Readable0x010列出程序有读权限的文件。可读值需配合Dirs和FilesQDir::Writable0x020列出程序有写权限的文件。可读值需配合Dirs和FilesQDir::Executable0x040列出程序有运行权限的文件。可读值需配合Dirs和FilesQDir::Modified0x080只列出已修改的文件(Unix系统忽略)QDir::Hidden0x100列出隐藏文件(Unix系统以“.”开头)QDir::System0x200列出系统文件QDir::CaseSensitive0x800过滤器应区分大小写

如果不设置QDir::filter,默认的选择是这样的: 
这里写图片描述

  • 设置历史目录setHistory
#include "mywidget.h"#include <QHBoxLayout>#include <QDebug>#include <QPushButton>MyWidget::MyWidget(QWidget *parent) : QWidget(parent){    QHBoxLayout *hlayout = new  QHBoxLayout(this);    fileDlg = new QFileDialog(this);    button = new QPushButton(this);    QStringList dirLIst;    dirLIst << "C:\\Intel" ;//添加了个路径    fileDlg->setHistory(dirLIst);    hlayout->addWidget(button);    setLayout(hlayout);    QObject::connect(button, SIGNAL(clicked()), this,  SLOT(onButton()));}void MyWidget::onButton(){    fileDlg->exec();}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

这里写图片描述

  • 返回文件图标提供者 
    QFileIconProvider * QFileDialog::iconProvider() const 
    这个就是关于文件等图标的函数,用这个函数可以获得是谁提供了这些图标的。当然系统图标也可以自己设置。

  • 返回委托 
    QAbstractItemDelegate * QFileDialog::itemDelegate() const 
    返回列表项目的delegate(委托),这些委托用来提供对话框视图中的项目。

  • 设置对话框中的文字标签 
    在对话框中可以设置的文字标签共有5处,如下图: 
    这里写图片描述

这里写图片描述 
这里就是举个例子,其他的内容为啥显示不出来我也不知道。。。。不过我试过把LoonIn这一项不手工设置,输出系统默认时发现,在我这个windows10机子上返回的结果是”“空……….

  • 返回MIME类型的文件过滤器 
    QStringList QFileDialog::mimeTypeFilters() const

  • 设置多个对话框右下角的文件过滤器

QStringList filters;filters << "Image files (*.png *.xpm *.jpg)"        << "Text files (*.txt)"        << "Any files (*)";fd.setNameFilters(filters);//就是这个函数咯
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

这里写图片描述

信号

在文件对话框中的操作会触发相应的信号

以后在更新~~

原创粉丝点击