(13)本源代码定义于头文件 qfiledialog . h :
#ifndef QFILEDIALOG_H
#define QFILEDIALOG_H
#include <QtWidgets/qtwidgetsglobal.h>
#include <QtCore/qdir.h>
#include <QtCore/qstring.h>
#include <QtCore/qurl.h>
#include <QtWidgets/qdialog.h>
#include <functional>
QT_REQUIRE_CONFIG(filedialog);
QT_BEGIN_NAMESPACE
class QModelIndex;
class QItemSelection;
struct QFileDialogArgs;
class QFileDialogPrivate;
class QAbstractFileIconProvider;
class QAbstractItemDelegate;
class QAbstractProxyModel;
/*
The QFileDialog class provides a dialog that allow users to select files or directories。
Detailed Description :
QFileDialog类使用户能够浏览文件系统以选择一个或多个文件或目录。
创建QFileDialog的最简单方法是使用静态函数。
fileName = QFileDialog::getOpenFileName(this,
tr("Open Image"), "/home/jana", tr("Image Files (*.png *.jpg *.bmp)"));
在上述示例中,使用一个静态函数创建了模态对话框 QFileDialog。该对话框最初会显示“/home/iana”目录的内容,
并显示与字符串“lmage Files(*.png*jpg*.bmp)”中给出的模式匹配的文件。
文件对话框的父窗口被设置为该对话框,窗口标题被设置为“OpenImage",
如果你想使用多个过滤器,请用两个分号 ;; 将它们分开。例如:
"Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml)"
您可以通过不使用静态函数来创建自己的QFileDialog。
通过调用setFileMode()函数,您可以指定用户在对话框中必须选择的内容:
QFileDialog dialog(this);
dialog.setFileMode(QFileDialog::AnyFile);
在上述示例中,文件对话框的模式被设置为“AnyFile”,这意味着用户可以选择任何文件,甚至指定一个不存在的文件。
这种模式对于创建“另存为”文件对话框非常有用。
如果用户必须选择已存在的文件,应使用“ExistingFile”;
如果只允许选择目录,则应使用“Directory”。有关模式完整列表,请参阅QFileDialog::FileMode枚举。
fileMode`属性包含对话框的操作模式;这指示了期望用户选择的对象类型。
使用`setNameFilter()来设置对话框的文件筛选器。例如:
dialog.setNameFilter(tr("Images (*.png *.xpm *.jpg)"));
在上述示例中,过滤器被设置为“Images(*.png*.xpm *.jpg)”,
这意味着只有扩展名为png、xpm或ipg的文件才会显示在QFileDialog中。
您可以通过调用setNameFilters()来应用多个过滤器。
使用selectNameFilter()来选择您设定的其中一个过滤器作为文件对话框的默认过滤器。
文件对话框有两种视图模式:列表和详细。
列表以文件和目录名称的列表形式呈现当前目录的内容。
详细模式也展示文件和目录名称的列表,但会在每个名称旁提供额外信息,如文件大小和修改日期。
使用`setViewMode ()'方法来设置模式:
dialog.setViewMode(QFileDialog::Detail);
在创建自己的文件对话框时,你需要使用的最后一个重要函数是selectedFiles()。
QStringList fileNames;
if (dialog.exec())
fileNames = dialog.selectedFiles();
在上面的例子中,创建并显示了一个模态文件对话框。如果用户点击了确定,则所选的文件将被放入fileName中。
可以通过setDirectory()设置对话框的工作目录。可以使用selectFile()函数选择当前目录中的每个文件。
标准对话框示例展示了如何使用QFileDialog以及Qt库中的其他内置对话框.
默认情况下,如果平台有相应的原生文件对话框,将使用该原生对话框。
在这种情况下,原本用于构建对话框的控件将不会实例化,
因此相关的访问器(如layout()和itemDelegate())将返回null。
您可以通过设置“DontUseNativeDialog”选项来确保使用基于控件的实现而非原生对话框。
*/
class Q_WIDGETS_EXPORT QFileDialog : public QDialog
{
Q_OBJECT
//enum ViewMode { Detail, List };
//此属性用于控制文件和目录在对话框中显示的方式。
//默认情况下,使用详细模式来显示文件和目录的信息。默认使用 Detail 模式。
Q_PROPERTY(ViewMode viewMode READ viewMode WRITE setViewMode)
//enum FileMode { AnyFile, ExistingFile, Directory, ExistingFiles };
//此属性保存对话框的文件模式。文件模式定义了用户在对话框中应选择的项目数量和类型。
//默认情况下,此属性设置为AnyFile。
//此函数将设置文件名和接受对话框标签。在调用setFileMode()之后,可以设置自定义文本。
Q_PROPERTY(FileMode fileMode READ fileMode WRITE setFileMode)
//enum AcceptMode { AcceptOpen, AcceptSave };
//此属性保存对话框的接受模式。操作模式定义了对话框是用于打开文件还是保存文件。
//默认情况下,此属性设置为Acceptopen。
Q_PROPERTY(AcceptMode acceptMode READ acceptMode WRITE setAcceptMode)
//如果未指定其他后缀,则将后缀添加到文件名中。
//该属性指定一个字符串,如果文件名没有后缀,这个字符串将被添加到文件名中。
//后缀通常用于表示文件类型(例如,“txt”表示文本文件)。如果第一个字符是点dot ('.'),则将其移除。
Q_PROPERTY(QString defaultSuffix READ defaultSuffix WRITE setDefaultSuffix)
//此属性包含影响对话框外观和感觉的各种选项。 默认情况下,所有选项都已禁用。
//选项(特别是DontUseNativeDialogs选项)应在更改对话框属性或显示对话框之前设置。
//在对话框可见时设置选项并不能保证立即对对话框产生影响(这取决于选项和平台)。
//在更改其他属性后设置选项可能会导致这些值无效。
Q_PROPERTY(Options options READ options WRITE setOptions)
//此属性包含文件对话框应允许导航的URL方案。 // scheme 方案[skiːm]; 主题 theme
//设置此属性可限制用户能够选择的URL类型。这是应用程序声明其将支持的协议以获取文件内容的一种方式。
//空列表表示未施加任何限制(为默认值)。
//对于本地文件(“file”方案)的支持是默示的且总是开启的;无需将其包含在限制列表中。
Q_PROPERTY(QStringList supportedSchemes
READ supportedSchemes WRITE setSupportedSchemes)
private:
Q_DECLARE_PRIVATE(QFileDialog)
Q_DISABLE_COPY(QFileDialog)
Q_PRIVATE_SLOT(d_func(), void _q_pathChanged(const QString &))
Q_PRIVATE_SLOT(d_func(), void _q_navigateBackward())
Q_PRIVATE_SLOT(d_func(), void _q_navigateForward())
Q_PRIVATE_SLOT(d_func(), void _q_navigateToParent())
Q_PRIVATE_SLOT(d_func(), void _q_createDirectory())
Q_PRIVATE_SLOT(d_func(), void _q_showListView())
Q_PRIVATE_SLOT(d_func(), void _q_showDetailsView())
Q_PRIVATE_SLOT(d_func(), void _q_showContextMenu(const QPoint &))
Q_PRIVATE_SLOT(d_func(), void _q_renameCurrent())
Q_PRIVATE_SLOT(d_func(), void _q_deleteCurrent())
Q_PRIVATE_SLOT(d_func(), void _q_showHidden())
Q_PRIVATE_SLOT(d_func(), void _q_updateOkButton())
Q_PRIVATE_SLOT(d_func(), void _q_currentChanged(const QModelIndex &index))
Q_PRIVATE_SLOT(d_func(), void _q_enterDirectory(const QModelIndex &index))
Q_PRIVATE_SLOT(d_func(), void _q_emitUrlSelected(const QUrl &))
Q_PRIVATE_SLOT(d_func(), void _q_emitUrlsSelected(const QList<QUrl> &))
Q_PRIVATE_SLOT(d_func(), void _q_nativeCurrentChanged(const QUrl &))
Q_PRIVATE_SLOT(d_func(), void _q_nativeEnterDirectory(const QUrl&))
Q_PRIVATE_SLOT(d_func(), void _q_goToDirectory(const QString &path))
Q_PRIVATE_SLOT(d_func(), void _q_useNameFilter(int index))
Q_PRIVATE_SLOT(d_func(), void _q_selectionChanged())
Q_PRIVATE_SLOT(d_func(), void _q_goToUrl(const QUrl &url))
Q_PRIVATE_SLOT(d_func(), void _q_goHome())
Q_PRIVATE_SLOT(d_func(), void _q_showHeader(QAction *))
Q_PRIVATE_SLOT(d_func(), void _q_autoCompleteFileName(const QString &text))
Q_PRIVATE_SLOT(d_func(), void _q_rowsInserted(const QModelIndex & parent))
Q_PRIVATE_SLOT(d_func(), void _q_fileRenamed(const QString &path,
const QString &oldName,
const QString &newName))
friend class QPlatformDialogHelper;
protected:
QFileDialog(const QFileDialogArgs & args);
void done (int result) override; //这是重写了基类 QDialog 里的槽函数
void accept () override;
void changeEvent(QEvent * e) override; //重写了基类里的事件
public:
enum DialogLabel { LookIn, FileName, FileType, Accept, Reject };
//Constructs a file dialog with the given parent and widget flags.
QFileDialog(QWidget * parent, Qt::WindowFlags flags);
explicit
QFileDialog(QWidget * parent = nullptr , const QString & caption = QString(),
const QString & directory = QString(), const QString & filter = QString());
//Constructs a file dialog with the given parent and
// caption that initially displays the contents of the specified directory.
//The contents of the directory are filtered before being shown in the dialog,
// using a semicolon-separated半角分隔符 list of filters specified by filter.
~QFileDialog();
enum ViewMode { Detail, List };
Q_ENUM(ViewMode)
// //此属性用于控制文件和目录在对话框中显示的方式。默认使用 Detail 模式。
// Q_PROPERTY(ViewMode viewMode
// READ viewMode WRITE setViewMode)
ViewMode viewMode() const;
void setViewMode(ViewMode mode);
enum FileMode { AnyFile, ExistingFile, Directory, ExistingFiles };
Q_ENUM(FileMode)
// //此属性保存对话框的文件模式。文件模式定义了用户在对话框中应选择的项目数量和类型。
// //默认情况下,此属性设置为AnyFile。
// Q_PROPERTY(FileMode fileMode
// READ fileMode WRITE setFileMode)
FileMode fileMode() const;
void setFileMode(FileMode mode);
enum AcceptMode { AcceptOpen, AcceptSave };
Q_ENUM(AcceptMode)
// //此属性保存对话框的接受模式。操作模式定义了对话框是用于打开文件还是保存文件。
// //默认情况下,此属性设置为Acceptopen。
// Q_PROPERTY(AcceptMode acceptMode
// READ acceptMode WRITE setAcceptMode)
AcceptMode acceptMode() const;
void setAcceptMode(AcceptMode mode);
// //如果未指定其他后缀,则将后缀添加到文件名中。如果第一个字符是点dot ('.'),则将其移除。
// Q_PROPERTY(QString defaultSuffix
// READ defaultSuffix WRITE setDefaultSuffix)
QString defaultSuffix() const;
void setDefaultSuffix(const QString & suffix);
// keep this in sync with QFileDialogOption::FileDialogOptions
enum Option
{ ShowDirsOnly = 0x00000001,
//仅在文件对话框中显示目录。默认情况下,会同时显示文件和目录。(仅在目录模式下有效。)
DontResolveSymlinks = 0x00000002,
//不要在文件对话框中解析符号链接。默认情况下,符号链接会被解析。
DontConfirmOverwrite = 0x00000004, //要求确认有写操作
//如果选择了现有文件,则不要求确认。默认情况下会请求确认
//Note: This opption is not supported on macOS when using the native file dialog.
DontUseNativeDialog = 0x00000008,
//请勿使用默认的本机文件对话框。除非您使用了包含QOBJECT宏的 QFileDialog子类,
//或者该平台没有您所需类型的本机对话框,否则将使用默认的本机文件对话框。
//Note: This option must be set before changing dialog properties or showing the dialog.
ReadOnly = 0x00000010, //表示模型是只读的。
HideNameFilterDetails = 0x00000020,
//指示文件名过滤器详细信息是否被隐藏。
DontUseCustomDirectoryIcons = 0x00000040
//请始终使用默认目录图标。某些平台允许用户设置不同的图标。此枚举值是在Qt 5.2中添加的。
//自定义图标查找在网络或可移动驱动器上会产生显著的性能影响。
//设置此选项将启用图标提供程序中的“QFileIconProvider::DontUseCustomDirectoryIcons”选项。
};
Q_ENUM(Option)
Q_DECLARE_FLAGS(Options, Option) // Options = QFlags<Option>
Q_FLAG(Options)
// //此属性包含影响对话框外观和感觉的各种选项。 默认情况下,所有选项都已禁用。
// Q_PROPERTY(Options options
// READ options WRITE setOptions)
Options options() const;
void setOption (Option option, bool on = true);
void setOptions(Options options);
bool testOption (Option option) const;
// //此属性包含文件对话框应允许导航的URL方案。空列表表示未施加任何限制(为默认值)。
// //对于本地文件(“file”方案)的支持是默示的且总是开启的;无需将其包含在限制列表中。
// Q_PROPERTY(QStringList supportedSchemes
// READ supportedSchemes WRITE setSupportedSchemes)
QStringList supportedSchemes() const;
void setSupportedSchemes(const QStringList & schemes);
using QDialog::open;
void open(QObject * receiver, const char * member);
void setVisible(bool visible) override;
QDir directory() const;
void setDirectory(const QString &directory);
inline
void setDirectory(const QDir &directory);
{ setDirectory(directory.absolutePath()); }
QUrl directoryUrl() const;
void setDirectoryUrl(const QUrl & directory);
void selectFile (const QString & filename);
QStringList selectedFiles() const;
void selectUrl (const QUrl &url);
QList<QUrl> selectedUrls() const;
QDir::Filters filter() const;
void setFilter(QDir::Filters filters);
QStringList nameFilters() const;
void selectNameFilter (const QString & filter );
QString selectedNameFilter () const;
void setNameFilter (const QString & filter );
void setNameFilters(const QStringList & filters);
QStringList mimeTypeFilters() const;
void selectMimeTypeFilter (const QString & filter );
QString selectedMimeTypeFilter () const;
void setMimeTypeFilters(const QStringList & filters);
QList<QUrl> sidebarUrls() const;
void setSidebarUrls(const QList<QUrl> & urls);
QByteArray saveState() const;
bool restoreState(const QByteArray & state);
QStringList history() const;
void setHistory(const QStringList & paths);
QAbstractItemDelegate * itemDelegate() const;
void setItemDelegate(QAbstractItemDelegate * delegate);
QAbstractFileIconProvider * iconProvider() const;
void setIconProvider(QAbstractFileIconProvider * provider);
QString labelText(DialogLabel label) const;
void setLabelText(DialogLabel label, const QString & text);
QAbstractProxyModel * proxyModel() const;
void setProxyModel(QAbstractProxyModel * model);
Q_SIGNALS:
void fileSelected(const QString & file );
void filesSelected(const QStringList & files);
void urlSelected(const QUrl & url );
void urlsSelected(const QList<QUrl> & urls);
void filterSelected(const QString & filter);
void currentChanged(const QString & path);
void currentUrlChanged(const QUrl & url);
void directoryEntered(const QString & directory);
void directoryUrlEntered(const QUrl & directory);
public:
/*
//这是一个方便的静态函数,返回用户选择的现有文件。如果用户按下取消,则返回空字符串。
//该函数使用给定的父控件 parent创建一个模态文件对话框。
//如果父控件不为空,则对话框将居中显示在父控件上方.
//文件对话框的工作目录将设置为 dir。如果 dir 中包含文件名,则该文件将被选中。
//仅显示与给定筛选器 filter匹配的文件,选定的筛选器将设置为 selectedFilter。
//参数 dir、filter和 selectedFilter可以是为空的字符串。
//如果您想要多个筛选器,可以使用俩分号';;'分隔开来,例如:
// "Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml)"
//参数 options包含了关于如何运行对话框的各种选项, Options = QFlags<Option>
//请参阅 QFileDialog::Option 枚举以获取有关可传递标志的更多信息。
//对话框的标题设置为caption。如果未指定标题,则将使用默认标题。
//在Windows和macOS上,此静态函数将使用原生文件对话框而不是QFileDialog。
//在Windows上,该对话框将启动一个阻塞的模态事件循环,不会派发任何QTimer,
// 并且如果父对象不是 nullptr,则会将对话框定位在父对象的标题栏下方。
//在Unix/X11上,文件对话框的正常行为是解析并遵循符号链接。例如,
//如果/usr/tmp是到/var/tmp的符号链接,那么在输入/usr/tmp后,文件对话框将切换到/var/tmp。
//如果选项 options包括“不解析符号链接”,则文件对话框会将符号链接视为普通目录。
//警告:在对话框执行过程中请勿删除父窗体 parent。
//如果您想这么做,应使用 QFileDialog构造函数之一自行创建对话框。
*/
static QString getOpenFileName (QWidget * parent = nullptr ,
const QString & caption = QString(),
const QString & dir = QString(),
const QString & filter = QString(),
QString * selectedFilter = nullptr ,
Options options = Options() );
static QUrl getOpenFileUrl (QWidget * parent = nullptr ,
const QString & caption = QString (),
const QUrl & dir = QUrl (),
const QString & filter = QString (),
QString * selectedFilter = nullptr ,
Options options = Options (),
const QStringList & supportedSchemes = QStringList() );
/*
这是一个方便的静态函数,返回用户选择的现有文件。如果用户按下取消,则返回一个空URL。
该函数的使用方式与 QFileDialog::getOpenFileName()类似。
具体而言,parent、caption、dir、filterselectedFilter和 options 的使用方法完全相同。
与QFileDialog:getOpenFileName ()的主要区别在于它为用户提供了选择远程文件的能力。
正因如此,返回类型和dir的类型被设定为QUrl。
supportedSchemes`参数允许限制用户能够选择的URL类型。
这是应用程序声明其将支持的协议以获取文件内容的一种方式。空列表表示没有施加任何限制(默认为如此)。
对于本地文件(“file”方案)的支持是默认且始终开启的;无需将其包含在限制列表中。
在可能的情况下,这个静态函数将使用原生文件对话框而非QFileDialog。
在不支持选择远程文件的平台上,Qt将仅允许选择本地文件。
*/
/*
这是一个方便的静态函数,将返回用户选择的一个或多个现有文件。
该函数使用给定的父控件 parent创建一个模态文件对话框。如果父控件不为空,则对话框将居中显示在父控件上方。
文件对话框的工作目录将设置为 dir。如果 dir 中包含文件名,则该文件将被选中。
过滤器被设置为 filter,这样只有与过滤器匹配的文件才会显示。
被选定的过滤器被设置为selectedfilter。dir、selectedFilter和filter 这些参数可以是空字符串。
如果您需要多个过滤器,可以使用“;;”将它们分隔开,例如:
"Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml)"
对话框的标题设置为caption。如果未指定标题,则将使用默认标题。
在Windows和macOS上,此静态函数将使用原生文件对话框而不是QFileDialog。
*/
static QStringList getOpenFileNames(QWidget * parent = nullptr,
const QString & caption = QString(),
const QString & dir = QString(),
const QString & filter = QString(),
QString * selectedFilter = nullptr,
Options options = Options() );
static QList<QUrl> getOpenFileUrls (QWidget * parent = nullptr ,
const QString & caption = QString(),
const QUrl & dir = QUrl (),
const QString & filter = QString(),
QString * selectedFilter = nullptr ,
Options options = Options(),
const QStringList & supportedSchemes = QStringList());
/*
这是一个方便的自定义静态函数,将返回由用户选定的一个或多个现有文件。
如果用户按下“取消”按钮,则返回一个空列表。
该函数的使用方式与QFileDialog::getOpenFileNames()类似。
特别是,parent、caption、dir、filter、selectedFilter和options的使用方式完全相同。
与`QFileDialog::getOpenfileNames ()、的主要区别在于它为用户提供了选择远程文件的能力。
这就是为什么返回类型和`dir`类型分别是`QList<QUrl>`和`QUrL`的原因。
supportedSchemes`参数允许限制用户能够选择的URL类型。
这是应用程序声明其将支持的协议以获取文件内容的一种方式。空列表表示没有施加任何限制(默认为如此)。
对于本地文件(“file”方案)的支持是默认且始终开启的;无需将其包含在限制列表中。
在可能的情况下,这个静态函数将使用原生文件对话框而非QFileDialog。
在不支持选择远程文件的平台上,Qt将仅允许选择本地文件。
*/
/*
//这是一个方便的静态函数,将返回用户选择的文件名。该文件不必存在。
//它会创建一个与给定父窗口 parent关联的模态文件对话框。
//如果父窗口不为空指针,则对话框将显示在父窗口正中央。
//getSaveFileName(this, tr("Save File"), "/home/aa.png", tr("Images (*.png *.jpg)"));
//文件对话框的工作目录将设置为 dir。如果 dir 中包含文件名,则该文件将被选中。
//仅显示与筛选器匹配的文件。选定的筛选器将设置为 selectedFilter。
//dir、selectedFilter和 filter 参数可以设置为空字符串。多个筛选器之间用“;;”分隔。例如:
// "Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml)"
//options参数包含了关于如何运行对话框的各种选项,
// 请参阅 QFileDialog:.Option 枚举以获取有关可传递标志的更多信息。
//可以通过将selectedFilter设置为所需值来选择默认过滤器。
//对话框的标题设置为 caption。如果未指定标题,则将使用默认标题。
//在Windows和macOS上,此静态函数将使用原生文件对话框而不是QFileDialog。
//在Windows上,该对话框将启动一个阻塞的模态事件循环,不会派发任何QTimer,
//而如果父对象不是nulptr,那么它会将对话框定位在父对象标题栏的下方。
//在macOs上,由于其内置的文件对话框,过滤参数将被忽略。
//在Unix/X11上,文件对话框的正常行为是解析并遵循符号链接。例如,
//如果/usr/tmp是到/var/tmp的符号链接那么在输入/usr/tmp后,文件对话框将切换到/var/tmp。
//如果选项包括“不解析符号链接”,则文件对话框会将夺号链接视为普通目录。
//警告:在对话框执行过程中请勿删除父控件 parent。
//如果您想这么做,应使用QFileDialog构造函数之-自行创建对话框。
*/
static QString getSaveFileName (QWidget * parent = nullptr ,
const QString & caption = QString(),
const QString & dir = QString(),
const QString & filter = QString(),
QString * selectedFilter = nullptr ,
Options options = Options());
static QUrl getSaveFileUrl (QWidget * parent = nullptr ,
const QString & caption = QString(),
const QUrl & dir = QUrl (),
const QString & filter = QString(),
QString * selectedFilter = nullptr ,
Options options = Options(),
const QStringList & supportedSchemes = QStringList() );
/*
这是一个方便的自定义静态函数,用于返回用户选择的一个文件。该文件不一定非得存在。
如果用户按下取消”按钮,函数将返回一个空URL。
该函数的使用方式与QFileDialog::getSaveFileName ()类似。
具体而言,parent、caption、dir、filter、selectedFilter和options的使用方式完全相同。
与`QFileDialog::getSaveFileName()、的主要区别在于它为用户提供了选择远程文件的能力。
正因如此,返回类型和`dir`的类型被设定为`QUrl`。
参数允许限制用户能够选择的URL类型。
这是应用程序声明其将支持的协supportedSchemes议以保存文件内容的一种方式。
空列表表示没有施加任何限制(默认为如此)。
对于本地文件(“file”方案)的支持是默认且始终开启的;无需将其包含在限制列表中。
在可能的情况下,这个静态函数将使用原生文件对话框而非QFileDialog。
在不支持选择远程文件的平台上,Qt将仅允许选择本地文件。
*/
/*
这是一个方便的静态函数,将返回用户选择的现有目录。
该函数使用给定的父控件 parent创建一个模态文件对话框。如果父控件不为空,则对话框将居中显示在父控件上方。
该对话框的工作目录被设置为 dir,标题被设置为 caption。
两者均可为空字符串,此时将分别使用当前目录和默认标题。
options参数包含了关于如何运行对话框的各种选项,
有关您可以传递的标记的详细信息,请参见QFileDialog::Option 枚举。
为确保使用原生文件对话框,必须设置 ShowDirsOnly。
在Windows和macOs上,这个静态函数将使用原生文件对话框而非OFileDialog。
然而,原生的Windows文件对话框并不支持在目录选择器中显示文件。
您需要传递DontUseNativeDialog参数,以便使用QFileDialog来显示文件。
在Unix/X11上,文件对话框的正常行为是解析并遵循符号链接。
例如,如果/usr/tmp是一个指向/var/tmp的符号涟接,那么在输入/usr/tmp后,文件对话框将切换至/ar/tmp。
如果使用选项中的“Don't Resolve Symlinks,则文件对话框会将符号链接视为普通目录。
在Windows上,该对话框将启动一个阻塞的模态事件循环,不会派发任何QTimer,
并且如果父对象不是nullptr,则会将对话框定位在父对象的标题栏下方。
警告:在对话框执行过程中请勿删除父对话框。
如果您想这么做,应使用QFileDialog构造函数之一自行创建对话框。
*/
static QString getExistingDirectory (QWidget * parent = nullptr ,
const QString & caption = QString(),
const QString & dir = QString(),
Options options = ShowDirsOnly );
static QUrl getExistingDirectoryUrl(QWidget * parent = nullptr ,
const QString & caption = QString(),
const QUrl & dir = QUrl() ,
Options options = ShowDirsOnly,
const QStringList & supportedSchemes = QStringList());
/*
这是一个方便的自定义静态函数,将返回由用户选择的现有目录。如果用户按下“取消”按钮,则返回一个空URL.
该函数的使用方式类似于QFileDialog:getExistingDirectory()。
特别是,parent、caption、dir和options在使用时完全相司。
与`QFileDialog:getExistingDirectory()、的主要区别在于它为用户提供了选择远程目录的能力。
这就是为什么返回类型和`dir'的类型是`QUrL'的原因。
supportedSchemes`参数允许限制用户能够选择的URL类型。
这是应用程序声明其将支持的协议以获取文件内容的一种方式。空列表表示没有施加任何限制(默认为如此)。
对于本地文件(“file”方案)的支持是默认且始终开启的;无需将其包含在限制列表中。
在可能的情况下,这个静态函数将使用原生文件对话框而非QFileDialog。
在不支持选择远程文件的平台上,Qt将仅允许选择本地文件。
此函数在Qt 5.2中引入。
*/
/*
这是一个方便的静态函数,将返回用户选择的文件内容。
该函数用于在Qt for WebAssembly中访问本地文件,而Web沙箱会对此类访问可能发生的途径施加限制。
其实现方式将使得浏览器显示一个原生文件对话框,用户可根据参数 nameFilter“进行文件选择。
它也可以在其他平台上使用,当无法访问本地文件时,它将回退到使用QFileDialog。
该函数是异步的,且会立即返回。
当文件被选择且其内容被读取到内存中时,将调用“fileContentsReady”回调函数。
auto fileContentReady = [](const QString & fileName, const QByteArray & fileContent) {
if (fileName.isEmpty()) {
// No file was selected //这是个范例
} else {
// Use fileName and fileContent
}
};
QFileDialog::getOpenFileContent("Images (*.png *.xpm *.jpg)", fileContentReady);
*/
static void getOpenFileContent(const QString & nameFilter ,
const std::function<void( const QString & fileName,
const QByteArray & fileContent )> & fileContentsReady);
static void saveFileContent(const QByteArray & fileContent,
const QString & fileNameHint = QString());
/*
这是一个便利的静态函数,用于将文件内容 fileContent保存到文件中,使用由用户选择的文件名和位置。
可以提供文件名提示 fileNameHint,以向用户建议一个文件名。
该函数用于将文件保存到Qtfor WebAssembly的本地文件系统中,
而Web沙箱会对此类访问可能发生的途径施加限制。
其实现方式将使得浏览器显示一个原生文件对话框,用户可以在其中进行文件选择。
它也可以在其他平台上使用,当无法访问本地文件系统时,它将回退到使用QFileDialog。
该函数是异步的,并立即返回。
QByteArray imageData; // obtained from e.g. QImage::save()
QFileDialog::saveFile("myimage.png", imageData);
*/
}; //完结 class QFileDialog : public QDialog
Q_DECLARE_OPERATORS_FOR_FLAGS(QFileDialog::Options)
QT_END_NAMESPACE
#endif // QFILEDIALOG_H
(14)
谢谢