版权声明:本文为博主原创文章,未经博主允许不得转载。
目录(?)[+]
头文件:#include
Pro文件:Qt += widgets
使用QFileDialog有两种方法,一种是比较简单的使用“静态函数法”,另一种是可以自定义各个细节的“构造函数法”。
根据官方的说明文档,总共有8个静态函数可以使用,我们可以举个例子,如getOpenFileName这个静态函数:
#include
#include
#include
#include
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
//括号里的参数分别是:指定父类、标题、默认打开后显示的目录、右下角的文件过滤器。
QString file_name = QFileDialog::getOpenFileName(NULL,"标题",".","*.txt");
qDebug() << file_name;
return a.exec();
}
这里需要注意下,最上头的是QApplication,不是QCoreApplication。运行结果如下:
这样就可以获得所需文件的绝对路径,就可以配合QFile来操作文件了。
下面来看下这8个静态函数可以干什么用?
QString file_name = QFileDialog::getExistingDirectory(NULL,"caption",".");
qDebug() << file_name;
getExistingDirectoryUrl
和getExistingDirectory类似,功能也是获取文件夹路径,最大的区别在于参数里的路径是QUrl类型,这为用户提供了选择远程目录的能力。
getOpenFileName 获取本地文件
该静态函数已经在上面的例子中示范过使用方法,这里不再赘述。
getOpenFileUrl 获取远程文件
为用户提供了获取远程文件路径的能力
getOpenFileUrls 获取多个远程文件
可以得到多个远程文件路径
getOpenFileNames 获取多个本地文件
QStringList file_name = QFileDialog::getOpenFileNames(NULL,"标题",".","*.*");
qDebug() << file_name.at(0);
qDebug() << file_name.at(1);
getSaveFileName 保存本地文件对话框
getSaveFileUrl 保存远程文件对话框
先构造一个QFileDialog对象:
QFileDialog fd;
fd.setAcceptMode(QFileDialog::AcceptOpen);//文件对话框为打开类型
fd.setAcceptMode(QFileDialog::AcceptSave);//文件对话框为保存类型
fd.setViewMode(QFileDialog::Detail);//详细
fd.setViewMode(QFileDialog::List);//仅列表
fd.setFileMode(QFileDialog::AnyFile);//文件名,无论是否存在
fd.setFileMode(QFileDialog::ExistingFile);//存在的,单个文件名
fd.setFileMode(QFileDialog::Directory);//文件夹名
fd.setFileMode(QFileDialog::ExistingFiles);//多文件
fd.setWindowTitle("标题");
fd.setDefaultSuffix("txt");
上面除了还有个Option没写以外,其他都是Properties,下面开始讲公共函数。
QDir dir = fd.directory();
qDebug() << dir;
//如果要获取远程目录,则用QDir dir = fd.directoryUrl();
fd.setFilter(QDir::AllDirs);
qDebug() << fd.filter();
这里的QDir::filter过滤器和对话框右下角(*.txt)过滤器不一样,QDir::filter过滤器有16个枚举,如下:
Constant | Value | Description |
---|---|---|
QDir::Dirs | 0x001 | 列出匹配filters的目录 |
QDir::AllDirs | 0x400 | 列出所有目录 |
QDir::Files | 0x002 | 列出所有文件 |
QDir::Drives | 0x004 | 列出磁盘驱动器(Unix系统忽略) |
QDir::NoSymLinks | 0x008 | 不列出符号连接 |
QDir::NoDotAndDotDot | NoDot or NoDotDot | 不列出特殊条目,如“.”或者“..” |
QDir::NoDot | 0x2000 | 不列出“.” |
QDir::NoDotDot | 0x4000 | 不列出“..” |
QDir::AllEntries | Dirs\Files\Drives | 列出目录、驱动盘、符号连接 |
QDir::Readable | 0x010 | 列出程序有读权限的文件。可读值需配合Dirs和Files |
QDir::Writable | 0x020 | 列出程序有写权限的文件。可读值需配合Dirs和Files |
QDir::Executable | 0x040 | 列出程序有运行权限的文件。可读值需配合Dirs和Files |
QDir::Modified | 0x080 | 只列出已修改的文件(Unix系统忽略) |
QDir::Hidden | 0x100 | 列出隐藏文件(Unix系统以“.”开头) |
QDir::System | 0x200 | 列出系统文件 |
QDir::CaseSensitive | 0x800 | 过滤器应区分大小写 |
#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();
}
返回文件图标提供者
QFileIconProvider * QFileDialog::iconProvider() const
这个就是关于文件等图标的函数,用这个函数可以获得是谁提供了这些图标的。当然系统图标也可以自己设置。
返回委托
QAbstractItemDelegate * QFileDialog::itemDelegate() const
返回列表项目的delegate(委托),这些委托用来提供对话框视图中的项目。
这里就是举个例子,其他的内容为啥显示不出来我也不知道。。。。不过我试过把LoonIn这一项不手工设置,输出系统默认时发现,在我这个windows10机子上返回的结果是”“空……….
返回MIME类型的文件过滤器
QStringList QFileDialog::mimeTypeFilters() const
设置多个对话框右下角的文件过滤器
QStringList filters;
filters << "Image files (*.png *.xpm *.jpg)"
<< "Text files (*.txt)"
<< "Any files (*)";
fd.setNameFilters(filters);//就是这个函数咯
在文件对话框中的操作会触发相应的信号
以后在更新~~