QFileDialog Class
提供一个对话框,允许用户选择文件或目录。更多...
| 标题: | #include <QFileDialog> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake: | QT += widgets |
| 继承自: | QDialog |
- 所有成员列表(包括继承的成员)
- QFileDialog 属于“标准对话框”类。
公共类型
| enum | AcceptMode { AcceptOpen, AcceptSave } |
| enum | DialogLabel { LookIn, FileName, FileType, Accept, Reject } |
| enum | FileMode { AnyFile, ExistingFile, Directory, ExistingFiles } |
| enum | Option { ShowDirsOnly, DontResolveSymlinks, DontConfirmOverwrite, DontUseNativeDialog, ReadOnly, …, DontUseCustomDirectoryIcons } |
| flags | Options |
| enum | ViewMode { Detail, List } |
属性
|
|
公共函数
| QFileDialog(QWidget *parent, Qt::WindowFlags flags) | |
| QFileDialog(QWidget *parent = nullptr, const QString &caption = QString(), const QString &directory = QString(), const QString &filter = QString()) | |
| virtual | ~QFileDialog() |
| QFileDialog::AcceptMode | acceptMode() const |
| QString | defaultSuffix() const |
| QDir | directory() const |
| QUrl | directoryUrl() const |
| QFileDialog::FileMode | fileMode() const |
| QDir::Filters | filter() const |
| QStringList | history() const |
| QAbstractFileIconProvider * | iconProvider() const |
| QAbstractItemDelegate * | itemDelegate() const |
| QString | labelText(QFileDialog::DialogLabel label) const |
| QStringList | mimeTypeFilters() const |
| QStringList | nameFilters() const |
| void | open(QObject *receiver, const char *member) |
| QFileDialog::Options | options() const |
| QAbstractProxyModel * | proxyModel() const |
| bool | restoreState(const QByteArray &state) |
| QByteArray | saveState() const |
| void | selectFile(const QString &filename) |
| void | selectMimeTypeFilter(const QString &filter) |
| void | selectNameFilter(const QString &filter) |
| void | selectUrl(const QUrl &url) |
| QStringList | selectedFiles() const |
| QString | selectedMimeTypeFilter() const |
| QString | selectedNameFilter() const |
| QList<QUrl> | selectedUrls() const |
| void | setAcceptMode(QFileDialog::AcceptMode mode) |
| void | setDefaultSuffix(const QString &suffix) |
| void | setDirectory(const QString &directory) |
| void | setDirectory(const QDir &directory) |
| void | setDirectoryUrl(const QUrl &directory) |
| void | setFileMode(QFileDialog::FileMode mode) |
| void | setFilter(QDir::Filters filters) |
| void | setHistory(const QStringList &paths) |
| void | setIconProvider(QAbstractFileIconProvider *provider) |
| void | setItemDelegate(QAbstractItemDelegate *delegate) |
| void | setLabelText(QFileDialog::DialogLabel label, const QString &text) |
| void | setMimeTypeFilters(const QStringList &filters) |
| void | setNameFilter(const QString &filter) |
| void | setNameFilters(const QStringList &filters) |
| void | setOption(QFileDialog::Option option, bool on = true) |
| void | setOptions(QFileDialog::Options options) |
| void | setProxyModel(QAbstractProxyModel *proxyModel) |
| void | setSidebarUrls(const QList<QUrl> &urls) |
| void | setSupportedSchemes(const QStringList &schemes) |
| void | setViewMode(QFileDialog::ViewMode mode) |
| QList<QUrl> | sidebarUrls() const |
| QStringList | supportedSchemes() const |
| bool | testOption(QFileDialog::Option option) const |
| QFileDialog::ViewMode | viewMode() const |
重新实现的公共函数
| virtual void | setVisible(bool visible) override |
信号
| void | currentChanged(const QString &path) |
| void | currentUrlChanged(const QUrl &url) |
| void | directoryEntered(const QString &directory) |
| void | directoryUrlEntered(const QUrl &directory) |
| void | fileSelected(const QString &file) |
| void | filesSelected(const QStringList &selected) |
| void | filterSelected(const QString &filter) |
| void | urlSelected(const QUrl &url) |
| void | urlsSelected(const QList<QUrl> &urls) |
静态公共成员
| QString | getExistingDirectory(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), QFileDialog::Options options = ShowDirsOnly) |
| QUrl | getExistingDirectoryUrl(QWidget *parent = nullptr, const QString &caption = QString(), const QUrl &dir = QUrl(), QFileDialog::Options options = ShowDirsOnly, const QStringList &supportedSchemes = QStringList()) |
| void | getOpenFileContent(const QString &nameFilter, const std::function<void (const QString &, const QByteArray &)> &fileOpenCompleted, QWidget *parent = nullptr) |
| QString | getOpenFileName(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options()) |
| QStringList | getOpenFileNames(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options()) |
| QUrl | getOpenFileUrl(QWidget *parent = nullptr, const QString &caption = QString(), const QUrl &dir = QUrl(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options(), const QStringList &supportedSchemes = QStringList()) |
| QList<QUrl> | getOpenFileUrls(QWidget *parent = nullptr, const QString &caption = QString(), const QUrl &dir = QUrl(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options(), const QStringList &supportedSchemes = QStringList()) |
| QString | getSaveFileName(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options()) |
| QUrl | getSaveFileUrl(QWidget *parent = nullptr, const QString &caption = QString(), const QUrl &dir = QUrl(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options(), const QStringList &supportedSchemes = QStringList()) |
| void | saveFileContent(const QByteArray &fileContent, const QString &fileNameHint, QWidget *parent = nullptr) |
重新实现的受保护函数
| virtual void | accept() override |
| virtual void | changeEvent(QEvent *e) override |
| virtual void | done(int result) override |
详细说明
QFileDialog 类允许用户浏览文件系统并选择一个或多个文件或目录。

QFileDialog 通常用于提示用户打开或保存文件,或者选择目录。使用 QFileDialog 最简单的方法是通过其静态便利函数,例如getOpenFileName()。
fileName = QFileDialog::getOpenFileName(this,
tr("Open Image"), "/home/jana", tr("Image Files (*.png *.jpg *.bmp)"));在此示例中,使用静态函数创建了一个模态 QFileDialog。该对话框最初显示/home/jana 目录的内容,并显示与"Image Files (*.png *.jpg *.bmp)" 中模式匹配的文件。窗口标题设置为Open Image 。
文件过滤器
按文件名或扩展名过滤文件
要按文件名或扩展名过滤显示的文件,请使用setNameFilter() 或setNameFilters() 函数。可以通过用两个分号 (;;) 分隔来指定多个过滤条件:
QFileDialog dialog(this);
dialog.setNameFilter(tr("Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml)"));
dialog.exec();按 MIME 类型过滤文件
若要按 MIME 类型过滤显示的文件,请使用setMimeTypeFilters() 函数:
QStringList mimeTypeFilters({"image/jpeg", // will show "JPEG image (*.jpeg *.jpg *.jpe)
"image/png", // will show "PNG image (*.png)"
"application/octet-stream" // will show "All files (*)"
});
QFileDialog dialog(this);
dialog.setMimeTypeFilters(mimeTypeFilters);
dialog.exec();文件过滤的区分大小写设置
根据目标平台的不同,文件过滤器可能区分大小写,也可能不区分大小写。
文件模式
QFileDialog 支持多种文件模式,这些模式决定了用户可以选择哪些文件:
QFileDialog dialog(this);
dialog.setFileMode(QFileDialog::AnyFile);- AnyFile:用户可以选择任何文件,包括不存在的文件(适用于“
Save As”对话框)。 - ExistingFile:用户必须选择一个已存在的文件。
- Directory:用户可以选择一个目录。
有关模式的完整列表,请参阅QFileDialog::FileMode 枚举。
fileMode 属性包含当前的操作模式。使用 `setFileMode()` 方法进行更改。
视图模式
QFileDialog 提供两种视图模式:
- 列表:以简单列表的形式显示文件和目录。
- 详细:显示文件大小和修改日期等附加信息。
使用setViewMode() 设置视图模式:
dialog.setViewMode(QFileDialog::Detail);获取选中的文件
对话框被接受后,使用 `selectedFiles()` 获取用户的选定内容:
QStringList fileNames;
if (dialog.exec())
fileNames = dialog.selectedFiles();可通过setDirectory()设置对话框的工作目录。可使用selectFile()预先选中一个文件。
平台注意事项
默认情况下,如果可用,QFileDialog 将使用平台的原生文件对话框。在这种情况下,某些控件特有的 API(例如layout() 和itemDelegate())可能会返回null 。此外,并非所有平台都会在文件对话框中显示标题栏,因此标题文本可能不可见。
若要强制使用基于 Qt Widgets 的对话框,请设置DontUseNativeDialog 选项或AA_DontUseNativeDialogs 应用程序属性。
安全注意事项
restoreState() 函数会反序列化一个带版本号的二进制数据块,该数据块描述了对话框的分隔栏布局、侧边栏书签、导航历史记录、当前目录以及一个嵌入的QHeaderView 状态数据块。虽然会验证该格式的魔数和版本号,但一旦外层结构被接受,各个字段就不会再进行其他有效性检查。
仅应向restoreState() 传递由saveState() 生成且已由同一版本(或兼容版本)的应用程序(通常通过QSettings )持久化的QByteArray 。切勿从来源不可信的文件、配置或其他来源恢复状态。嵌入的标头状态需遵循QHeaderView's Security Considerations 中所述的相同注意事项。
另请参阅 QDir 、QFileInfo 、QFile 、QColorDialog 、QFontDialog 以及“标准对话框示例”。
成员类型文档
enum QFileDialog::AcceptMode
| 常数 | 值 |
|---|---|
QFileDialog::AcceptOpen | 0 |
QFileDialog::AcceptSave | 1 |
enum QFileDialog::DialogLabel
| 常数 | 值 |
|---|---|
QFileDialog::LookIn | 0 |
QFileDialog::FileName | 1 |
QFileDialog::FileType | 2 |
QFileDialog::Accept | 3 |
QFileDialog::Reject | 4 |
enum QFileDialog::FileMode
此枚举用于指定用户在文件对话框中可选择的选项;即,当用户单击“确定”时,对话框返回的值。
| 常量 | 值 | 描述 |
|---|---|---|
QFileDialog::AnyFile | 0 | 文件的名称,无论该文件是否存在。 |
QFileDialog::ExistingFile | 1 | 单个已存在文件的名称。 |
QFileDialog::Directory | 2 | 目录的名称。文件和目录都会显示。但是,Windows 本机文件对话框不支持在目录选择器中显示文件。 |
QFileDialog::ExistingFiles | 3 | 零个或多个现有文件的名称。 |
另请参阅 setFileMode()。
enum QFileDialog::Option
flags QFileDialog::Options
影响对话框行为的选项。
| 常量 | 值 | 描述 |
|---|---|---|
QFileDialog::ShowDirsOnly | 0x00000001 | 仅显示目录。默认情况下,文件和目录都会显示。 This option is only effective in the Directory file mode. |
QFileDialog::DontResolveSymlinks | 0x00000002 | 不要解析符号链接。默认情况下,符号链接会被解析。 |
QFileDialog::DontConfirmOverwrite | 0x00000004 | 如果选中了现有文件,则不请求确认。默认情况下,系统会请求确认。 This option is only effective if acceptMode is AcceptSave). It is furthermore not used on macOS for native file dialogs. |
QFileDialog::DontUseNativeDialog | 0x00000008 | 请不要使用平台原生的文件对话框,而应使用 Qt 提供的基于小部件的文件对话框。 By default, a native file dialog is shown unless you use a subclass of QFileDialog that contains the Q_OBJECT macro, the global AA_DontUseNativeDialogs application attribute is set, or the platform does not have a native dialog of the type that you require. 要使该选项生效,您必须在更改对话框的其他属性或显示对话框之前设置它。 |
QFileDialog::ReadOnly | 0x00000010 | 表示该模型为只读模式。 |
QFileDialog::HideNameFilterDetails | 0x00000020 | 指示文件名筛选器的详细信息是否被隐藏。 |
QFileDialog::DontUseCustomDirectoryIcons | 0x00000040 | 始终使用默认目录图标。 某些平台允许用户设置不同的图标,但在网络或可移动驱动器上,自定义图标的查找可能会导致严重的性能问题。 Setting this will enable the DontUseCustomDirectoryIcons option in iconProvider(). 该枚举值是在 Qt 5.2 中添加的。 |
Options 类型是QFlags<Option> 的 typedef。它存储 Option 值的按“或”运算组合。
另请参阅 options 和testOption 。
enum QFileDialog::ViewMode
此枚举描述了文件对话框的查看模式,即显示每个文件的哪些信息。
| 常量 | 值 | 描述 |
|---|---|---|
QFileDialog::Detail | 0 | 显示目录中每个项目的图标、名称和详细信息。 |
QFileDialog::List | 1 | 仅显示目录中每个项目的图标和名称。 |
另请参阅 setViewMode()。
属性文档
acceptMode : AcceptMode
该属性存储对话框的接受模式。
操作模式定义了对话框是用于打开文件还是保存文件。
默认情况下,此属性设置为AcceptOpen 。
访问函数:
| QFileDialog::AcceptMode | acceptMode() const |
| void | setAcceptMode(QFileDialog::AcceptMode mode) |
另请参阅 AcceptMode 。
defaultSuffix : QString
如果未指定其他后缀,则添加到文件名后的后缀。
此属性指定了一段字符串,当文件名尚未带有后缀时,该字符串将被添加到文件名中。后缀通常用于标识文件类型(例如,“txt”表示文本文件)。
如果第一个字符是点('.'),则将其删除。
访问函数:
| QString | defaultSuffix() const |
| void | setDefaultSuffix(const QString &suffix) |
fileMode : FileMode
该属性存储对话框的文件模式。
文件模式定义了用户在对话框中应选择的项目数量和类型。
默认情况下,该属性的值设置为AnyFile 。
此函数用于设置FileName 和Accept DialogLabel 的标签。在调用setFileMode()之后,可以设置自定义文本。
相关函数:
| QFileDialog::FileMode | fileMode() const |
| void | setFileMode(QFileDialog::FileMode mode) |
另请参阅 FileMode 。
options : Options
该属性包含影响对话框外观和风格的各种选项。
默认情况下,所有选项均处于禁用状态。
在更改对话框属性或显示对话框之前,应先设置选项(特别是“DontUseNativeDialog ”选项)。
在对话框可见时设置选项,不能保证会立即对对话框产生影响(这取决于选项和平台)。
在更改其他属性后设置选项可能会导致这些值不起作用。
访问函数:
| QFileDialog::Options | options() const |
| void | setOptions(QFileDialog::Options options) |
另请参阅 setOption() 和testOption()。
supportedSchemes : QStringList
该属性用于指定文件对话框应允许导航到的 URL 方案。
设置此属性可限制用户可选择的 URL 类型。这是应用程序声明其支持哪些协议来获取文件内容的一种方式。 空列表表示不施加任何限制(默认行为)。对本地文件(“file”方案)的支持是隐含的且始终启用;无需将其包含在限制范围内。
访问函数:
| QStringList | supportedSchemes() const |
| void | setSupportedSchemes(const QStringList &schemes) |
viewMode : ViewMode
此属性控制对话框中文件和目录的显示方式。
默认情况下,使用“Detail ”模式显示文件和目录的信息。
访问函数:
| QFileDialog::ViewMode | viewMode() const |
| void | setViewMode(QFileDialog::ViewMode mode) |
另请参阅 ViewMode 。
成员函数文档
QFileDialog::QFileDialog(QWidget *parent, Qt::WindowFlags flags)
根据给定的parent 和控件flags 构建一个文件对话框。
[explicit] QFileDialog::QFileDialog(QWidget *parent = nullptr, const QString &caption = QString(), const QString &directory = QString(), const QString &filter = QString())
根据给定的parent 和caption 构建一个文件对话框,该对话框初始时显示指定directory 中的内容。在将目录内容显示在对话框中之前,会使用由filter 指定的、以分号分隔的过滤器列表对内容进行过滤。
[virtual noexcept] QFileDialog::~QFileDialog()
关闭“删除文件”对话框。
[override virtual protected] void QFileDialog::accept()
重写了:QDialog::accept()。
[override virtual protected] void QFileDialog::changeEvent(QEvent *e)
重写了:QWidget::changeEvent(QEvent *event)。
[signal] void QFileDialog::currentChanged(const QString &path)
在本地操作中,当当前文件发生变化时,会发出此信号,并将新文件名作为path 参数传入。
另请参阅 filesSelected()。
[signal] void QFileDialog::currentUrlChanged(const QUrl &url)
当当前文件发生变化时,会发出此信号,并将新文件的 URL 作为url 参数传入。
另请参阅 urlsSelected()。
QDir QFileDialog::directory() const
返回对话框中当前显示的目录。
另请参阅 setDirectory()。
[signal] void QFileDialog::directoryEntered(const QString &directory)
当用户输入directory 时,该信号会在本地操作中发出。
QUrl QFileDialog::directoryUrl() const
返回对话框中当前显示的目录的 URL。
另请参阅 setDirectoryUrl()。
[signal] void QFileDialog::directoryUrlEntered(const QUrl &directory)
当用户访问directory 时,会发出此信号。
[override virtual protected] void QFileDialog::done(int result)
重新实现了:QDialog::done(int r)。
[signal] void QFileDialog::fileSelected(const QString &file)
当本地操作的选择发生变化且对话框被接受时,会发出此信号,并携带(可能为空的)选定的file 。
另请参阅 currentChanged() 和QDialog::Accepted 。
[signal] void QFileDialog::filesSelected(const QStringList &selected)
当本地操作的选择发生变化且对话框被接受时,将发出此信号,并附带一个包含selected 文件的列表(该列表可能为空)。
另请参阅 currentChanged() 和QDialog::Accepted 。
QDir::Filters QFileDialog::filter() const
返回显示文件时使用的过滤器。
另请参阅 ` setFilter()`。
[signal] void QFileDialog::filterSelected(const QString &filter)
当用户选择filter 时,会发出此信号。
[static] QString QFileDialog::getExistingDirectory(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), QFileDialog::Options options = ShowDirsOnly)
这是一个便捷的静态函数,用于返回用户选定的现有目录。
QString dir = QFileDialog::getExistingDirectory(this, tr("Open Directory"),
"/home",
QFileDialog::ShowDirsOnly
| QFileDialog::DontResolveSymlinks);该函数使用给定的parent 控件创建一个模态文件对话框。如果parent 不是nullptr ,则对话框将居中显示在父控件上方。
对话框的工作目录设置为dir ,标题设置为caption 。这两者均可为空字符串,此时将分别使用当前目录和默认标题。
options 参数包含关于如何运行对话框的各种选项。有关可传递标志的更多信息,请参阅QFileDialog::Option 枚举。为确保使用原生文件对话框,必须设置ShowDirsOnly 。
在 Windows 和 macOS 上,此静态函数使用原生文件对话框,而非QFileDialog 。但是,Windows 原生文件对话框不支持在目录选择器中显示文件。您需要传递DontUseNativeDialog 选项,或设置全局AA_DontUseNativeDialogs 应用程序属性,才能使用QFileDialog 显示文件。
请注意,macOS的原生文件对话框不显示标题栏。
在 Unix/X11 系统上,文件对话框的常规行为是解析并跟随符号链接。例如,如果/usr/tmp 是指向/var/tmp 的符号链接,则在输入/usr/tmp 后,文件对话框会切换至/var/tmp 。如果options 包含DontResolveSymlinks ,则文件对话框会将符号链接视为普通目录。
在 Windows 上,该对话框会运行一个阻塞式的模态事件循环,该循环不会分发任何 QTimer;如果parent 不是nullptr ,则会将对话框定位在父窗口标题栏的正下方。
另请参阅 getOpenFileName()、getOpenFileNames() 和getSaveFileName()。
[static] QUrl QFileDialog::getExistingDirectoryUrl(QWidget *parent = nullptr, const QString &caption = QString(), const QUrl &dir = QUrl(), QFileDialog::Options options = ShowDirsOnly, const QStringList &supportedSchemes = QStringList())
这是一个便捷的静态函数,用于返回用户选择的现有目录。如果用户点击“取消”,则返回一个空 URL。
该函数的使用方式与 `QFileDialog::getExistingDirectory()` 类似。特别是 `parent`、`caption`、`dir ` 和 `options ` 的用法完全相同。
与QFileDialog::getExistingDirectory() 的主要区别在于,该函数允许用户选择远程目录。因此,dir 的返回类型和类型均为QUrl 。
supportedSchemes 参数用于限制用户可选择的URL类型。这是应用程序声明其支持哪些协议以获取文件内容的一种方式。 空列表表示不施加任何限制(默认行为)。对本地文件(“file”方案)的支持是隐含的且始终启用;无需将其包含在限制中。
在可能的情况下,此静态函数会使用原生文件对话框,而非 `QFileDialog`。在不支持选择远程文件的平台上,Qt 仅允许选择本地文件。
另请参见 getExistingDirectory()、getOpenFileUrl()、getOpenFileUrls() 和getSaveFileUrl()。
[static] void QFileDialog::getOpenFileContent(const QString &nameFilter, const std::function<void (const QString &, const QByteArray &)> &fileOpenCompleted, QWidget *parent = nullptr)
这是一个便捷的静态函数,用于返回用户选定文件的内容。
若 Web 沙箱限制了文件访问权限,可在 Qt for WebAssembly 中使用此函数访问本地文件。其实现可在浏览器中显示原生文件对话框,用户可基于 `nameFilter ` 参数在其中选择文件。
parent 在 Qt for WebAssembly 中,parent 会被忽略。在其他平台上,请传入 ,以使弹出窗口成为另一个控件的子控件。如果平台不支持原生文件对话框,该函数将回退到QFileDialog 。
该函数为异步函数,会立即返回。当选定文件且其内容已读入内存时,将调用fileOpenCompleted 回调函数。
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] QString QFileDialog::getOpenFileName(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options())
这是一个便捷的静态函数,用于返回用户选定的现有文件。如果用户点击“取消”,则返回空字符串。
QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"),
"/home",
tr("Images (*.png *.xpm *.jpg)"));该函数使用给定的parent 控件创建一个模态文件对话框。如果parent 不是nullptr ,则对话框将居中显示在父控件上方。
文件对话框的工作目录设置为dir 。如果dir 包含文件名,则该文件被选中。仅显示符合给定filter 的文件。所选过滤器设置为selectedFilter 。参数dir 、selectedFilter 和filter 可以是空字符串。如果需要多个过滤器,请用“;;”分隔,例如:
"Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml)"options 参数包含有关如何运行对话框的各种选项。有关可传递标志的更多信息,请参阅QFileDialog::Option 枚举。
对话框的标题设置为caption 。如果未指定caption ,则将使用默认标题。
在 Windows 和 macOS 上,此静态函数使用原生文件对话框,而非QFileDialog 。请注意,macOS 的原生文件对话框不显示标题栏。
在 Windows 上,该对话框会运行一个阻塞式的模态事件循环,该循环不会分发任何 QTimer;如果parent 不是nullptr ,则会将对话框定位在父窗口标题栏的正下方。
在 Unix/X11 系统上,文件对话框的常规行为是解析并跟随符号链接。例如,如果/usr/tmp 是指向/var/tmp 的符号链接,那么在输入/usr/tmp 之后,文件对话框会切换到/var/tmp 。如果options 包含DontResolveSymlinks ,则文件对话框会将符号链接视为普通目录。
另请参阅 getOpenFileNames()、getSaveFileName() 和getExistingDirectory()。
[static] QStringList QFileDialog::getOpenFileNames(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options())
这是一个便捷的静态函数,用于返回用户选择的一个或多个现有文件。
QStringList files = QFileDialog::getOpenFileNames(
this,
"Select one or more files to open",
"/home",
"Images (*.png *.xpm *.jpg)");该函数使用给定的parent 控件创建一个模态文件对话框。如果parent 不是nullptr ,则对话框将居中显示在父控件上方。
文件对话框的工作目录设置为dir 。如果dir 包含文件名,则该文件会被选中。过滤器设置为filter ,以便仅显示符合该过滤器条件的文件。所选过滤器设置为selectedFilter 。参数dir 、selectedFilter 和filter 可以是空字符串。如果需要多个过滤器,请用“;;”分隔,例如:
"Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml)"对话框的标题设置为caption 。如果未指定caption ,则使用默认标题。
在 Windows 和 macOS 上,此静态函数使用原生文件对话框,而非QFileDialog 。请注意,macOS 的原生文件对话框不会显示标题栏。
在 Windows 上,该对话框会运行一个阻塞的模态事件循环,该循环不会分发任何 QTimer;如果parent 不是nullptr ,则会将对话框定位在父窗口标题栏的正下方。
在 Unix/X11 系统上,文件对话框的常规行为是解析并跟随符号链接。例如,如果 `/usr/tmp ` 是指向 `/var/tmp` 的符号链接,则在输入 `/usr/tmp` 后,文件对话框将跳转至 `/var/tmp `。`options ` 参数包含关于如何运行对话框的各种选项,有关可传递标志的更多信息,请参阅 `QFileDialog::Option ` 枚举。
另请参阅 getOpenFileName()、getSaveFileName() 和getExistingDirectory()。
[static] QUrl QFileDialog::getOpenFileUrl(QWidget *parent = nullptr, const QString &caption = QString(), const QUrl &dir = QUrl(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options(), const QStringList &supportedSchemes = QStringList())
这是一个便捷的静态函数,用于返回用户选定的现有文件。如果用户点击“取消”,则返回一个空的 URL。
该函数的使用方式与 `QFileDialog::getOpenFileName()` 类似。特别是 `parent`、`caption`、`dir`、`filter`、`selectedFilter ` 和 `options ` 的用法完全一致。
与QFileDialog::getOpenFileName() 的主要区别在于,后者允许用户选择远程文件。因此,其返回类型以及dir 的类型均为QUrl 。
supportedSchemes 参数允许限制用户可选择的URL类型。这是应用程序声明其支持哪些协议来获取文件内容的一种方式。 空列表表示不施加任何限制(默认行为)。对本地文件(“file”方案)的支持是隐含的且始终启用;无需将其包含在限制中。
在可能的情况下,此静态函数会使用原生文件对话框,而非 `QFileDialog`。在不支持选择远程文件的平台上,Qt 将仅允许选择本地文件。
另请参阅 getOpenFileName()、getOpenFileUrls()、getSaveFileUrl() 以及getExistingDirectoryUrl()。
[static] QList<QUrl> QFileDialog::getOpenFileUrls(QWidget *parent = nullptr, const QString &caption = QString(), const QUrl &dir = QUrl(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::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 将仅允许选择本地文件。
另请参阅 getOpenFileNames()、getOpenFileUrl()、getSaveFileUrl() 和getExistingDirectoryUrl()。
[static] QString QFileDialog::getSaveFileName(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options())
这是一个便捷的静态函数,用于返回用户选择的文件名。该文件不必实际存在。
它使用给定的parent 控件创建一个模态文件对话框。如果parent 不是nullptr ,则对话框将居中显示在父控件上方。
QString fileName = QFileDialog::getSaveFileName(this, tr("Save File"),
"/home/jana/untitled.png",
tr("Images (*.png *.xpm *.jpg)"));文件对话框的工作目录设置为dir 。如果dir 包含文件名,则该文件会被选中。仅显示符合filter 的文件。所选过滤器设置为selectedFilter 。参数dir 、selectedFilter 和filter 可以是空字符串。多个过滤器用“;;”分隔。例如:
"Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml)"options 参数包含有关如何运行对话框的各种选项,有关可传递标志的更多信息,请参阅QFileDialog::Option 枚举。
可通过将 `selectedFilter ` 设置为所需值来选择默认过滤器。
对话框的标题将设置为 `caption`。如果未指定 `caption `,则使用默认标题。
在 Windows 和 macOS 上,此静态函数使用原生文件对话框,而非 `QFileDialog`。
在 Windows 上,该对话框会运行一个阻塞式的模态事件循环,该循环不会分发任何 QTimer;如果parent 不是nullptr ,则会将对话框定位在父窗口标题栏的正下方。在 macOS 上,由于使用原生文件对话框,因此会忽略 filter 参数。
在 Unix/X11 系统上,文件对话框的默认行为是解析并跟随符号链接。例如,如果/usr/tmp 是指向/var/tmp 的符号链接,则在输入/usr/tmp 后,文件对话框会切换至/var/tmp 。如果options 包含DontResolveSymlinks ,文件对话框会将符号链接视为普通目录。
另请参阅 getOpenFileName()、getOpenFileNames() 和getExistingDirectory()。
[static] QUrl QFileDialog::getSaveFileUrl(QWidget *parent = nullptr, const QString &caption = QString(), const QUrl &dir = QUrl(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options(), const QStringList &supportedSchemes = QStringList())
这是一个便捷的静态函数,用于返回用户选择的文件。该文件不必实际存在。如果用户点击“取消”,则返回一个空的 URL。
该函数的使用方式与 `QFileDialog::getSaveFileName()` 类似。特别是 `parent`、`caption`、`dir`、`filter`、`selectedFilter ` 和 `options ` 的用法完全相同。
与QFileDialog::getSaveFileName() 的主要区别在于,后者允许用户选择远程文件。因此,dir 的返回类型和类型均为QUrl 。
supportedSchemes 参数用于限制用户可选择的URL类型。这是应用程序声明其支持的用于保存文件内容的协议的一种方式。 空列表表示不进行任何限制(默认行为)。对本地文件(“file”方案)的支持是隐式的且始终启用;无需将其包含在限制中。
在可能的情况下,此静态函数会使用原生文件对话框,而非 `QFileDialog`。在不支持选择远程文件的平台上,Qt 将仅允许选择本地文件。
另请参见 getSaveFileName()、getOpenFileUrl()、getOpenFileUrls() 和getExistingDirectoryUrl()。
QStringList QFileDialog::history() const
返回文件选择对话框的浏览历史记录,形式为路径列表。
另请参阅 setHistory()。
QAbstractFileIconProvider *QFileDialog::iconProvider() const
返回文件对话框所使用的图标提供程序。
另请参阅 setIconProvider()。
QAbstractItemDelegate *QFileDialog::itemDelegate() const
返回用于在文件对话框的视图中渲染项目的项目委托。
另请参阅 setItemDelegate()。
QString QFileDialog::labelText(QFileDialog::DialogLabel label) const
返回指定label 中文件对话框显示的文本。
另请参阅 setLabelText()。
QStringList QFileDialog::mimeTypeFilters() const
返回当前文件对话框中正在起作用的 MIME 类型过滤器。
另请参阅 setMimeTypeFilters()。
QStringList QFileDialog::nameFilters() const
返回当前文件对话框中正在使用的文件类型过滤器。
另请参阅 setNameFilters()。
void QFileDialog::open(QObject *receiver, const char *member)
该函数显示对话框,并将由receiver 和member 指定的槽连接到用于通知选择变化的信号。如果fileMode 为ExistingFiles ,则该信号为filesSelected();否则为fileSelected()。
当对话框关闭时,该信号将与插槽断开连接。
QAbstractProxyModel *QFileDialog::proxyModel() const
返回文件对话框所使用的代理模型。默认情况下未设置代理。
另请参阅 setProxyModel()。
bool QFileDialog::restoreState(const QByteArray &state)
将对话框的布局、历史记录和当前目录恢复为指定的state 。
通常,此功能需与QSettings 配合使用,以恢复过去会话中的窗口大小。
如果出现错误,则返回false
[static] void QFileDialog::saveFileContent(const QByteArray &fileContent, const QString &fileNameHint, QWidget *parent = nullptr)
这是一个便捷的静态函数,用于将fileContent 保存到文件中,文件名和保存位置由用户选择。可以提供fileNameHint 参数,向用户建议文件名。
若 Web 沙箱限制了文件访问权限,请在 Qt for WebAssembly 上使用此函数将内容保存到本地文件中。其实现可在浏览器中显示原生文件对话框,用户可根据fileNameHint 参数指定输出文件。
parent 在 Qt for WebAssembly 上,该参数将被忽略。在其他平台上,请传递parent 参数,以使弹出窗口成为另一个小部件的子窗口。如果平台不支持原生文件对话框,该函数将回退到QFileDialog 。
该函数为异步函数,执行后立即返回。
QByteArray imageData; // obtained from e.g. QImage::save()
QFileDialog::saveFileContent(imageData, "myimage.png");QByteArray QFileDialog::saveState() const
保存对话框的布局、历史记录和当前目录的状态。
通常,此功能会与QSettings 配合使用,以便在下次会话中记住窗口大小。数据中会存储一个版本号。
void QFileDialog::selectFile(const QString &filename)
在文件对话框中选择指定的filename 。
另请参阅 selectedFiles()。
void QFileDialog::selectMimeTypeFilter(const QString &filter)
将当前 MIME 类型设置为filter 。
void QFileDialog::selectNameFilter(const QString &filter)
设置当前文件类型filter 。可以通过用分号或空格分隔,在filter 中传入多个过滤器。
另请参阅 setNameFilter()、setNameFilters() 和selectedNameFilter()。
void QFileDialog::selectUrl(const QUrl &url)
在文件对话框中选择指定的url 。
注意:非原生 QFileDialog 仅支持本地文件。
另请参阅 selectedUrls()。
QStringList QFileDialog::selectedFiles() const
返回一个字符串列表,其中包含对话框中选定文件的绝对路径。如果未选中任何文件,或者当前模式不是ExistingFiles 或ExistingFile ,则selectedFiles()将包含视口中的当前路径。
另请参阅 selectedNameFilter() 和selectFile()。
QString QFileDialog::selectedMimeTypeFilter() const
返回用户在文件对话框中选中的文件的 MIME 类型。
QString QFileDialog::selectedNameFilter() const
返回用户在文件对话框中选定的过滤器。
另请参阅 selectedFiles()。
QList<QUrl> QFileDialog::selectedUrls() const
返回一个包含对话框中选定文件的 URL 列表。如果未选定任何文件,或者当前模式不是ExistingFiles 或ExistingFile ,则 selectedUrls() 将包含视口中的当前路径。
另请参阅 selectedNameFilter() 和selectUrl()。
void QFileDialog::setDirectory(const QString &directory)
设置文件对话框的当前directory 。
注意:在 iOS上 ,如果将directory 设置为QStandardPaths::standardLocations(QStandardPaths::PicturesLocation).last(),则会使用原生图片选择对话框来访问用户的相册。 返回的文件名可通过QFile 及相关 API 加载。要启用此功能,项目文件中分配给 QMAKE_INFO_PLIST 的 Info.plist 必须包含键NSPhotoLibraryUsageDescription 。有关此键的更多信息,请参阅 Apple 的 Info.plist 文档。此功能于 Qt 5.5 中添加。
另请参阅 directory()。
void QFileDialog::setDirectory(const QDir &directory)
这是一个重载函数。
void QFileDialog::setDirectoryUrl(const QUrl &directory)
设置文件对话框的当前directory 网址。
注意: 非原生QFileDialog 仅支持本地文件。
注意:在 Windows系统上 ,可以传递代表虚拟文件夹(如“计算机”或“网络”)的 URL。具体操作为:传递一个采用clsid 方案的QUrl ,后跟去掉大括号的 CLSID 值。例如,URLclsid:374DE290-123F-4565-9164-39C4925E467B 表示下载位置。 有关可用值的完整列表,请参阅 MSDN 文档中关于KNOWNFOLDERID 的说明。此功能在 Qt 5.5 中新增。
另请参阅 directoryUrl() 和QUuid 。
void QFileDialog::setFilter(QDir::Filters filters)
将模型使用的过滤器设置为filters 。该过滤器用于指定应显示的文件类型。
另请参阅 filter()。
void QFileDialog::setHistory(const QStringList &paths)
将文件对话框的浏览历史记录设置为包含指定的paths 。
另请参阅 history()。
void QFileDialog::setIconProvider(QAbstractFileIconProvider *provider)
将文件对话框使用的图标提供程序设置为指定的provider 。
另请参阅 iconProvider()。
void QFileDialog::setItemDelegate(QAbstractItemDelegate *delegate)
将文件对话框中用于在视图中渲染项目的项目委托设置为给定的delegate 。
任何现有的委托都将被移除,但不会被删除。QFileDialog 不会接管delegate 的所有权。
警告:不应在 不同视图之间共享同一个委托实例。这样做可能会导致编辑行为不正确或反直觉,因为连接到该委托的每个视图都可能接收到closeEditor()信号,并试图访问、修改或关闭一个已经关闭的编辑器。
请注意,所使用的模型是QFileSystemModel 。它具有自定义项目数据角色,这些角色由Roles 枚举描述。如果您仅需自定义图标,可以使用QFileIconProvider 。
另请参阅 itemDelegate()、setIconProvider() 和QFileSystemModel 。
void QFileDialog::setLabelText(QFileDialog::DialogLabel label, const QString &text)
在指定的label 中,设置文件对话框中显示的text 。
另请参阅 labelText()。
void QFileDialog::setMimeTypeFilters(const QStringList &filters)
从 MIME 类型列表中设置文件对话框中使用的filters 。
setNameFilters() 的便捷方法。使用QMimeType 根据每个 MIME 类型中定义的通配符模式和描述来创建名称过滤器。
请将“所有文件 (*)”过滤器设置为 application/octet-stream,因为这是所有文件的基础 MIME 类型。
调用 setMimeTypeFilters 会覆盖之前设置的任何名称过滤器,并更改nameFilters() 的返回值。
QStringList mimeTypeFilters({"image/jpeg", // will show "JPEG image (*.jpeg *.jpg *.jpe)
"image/png", // will show "PNG image (*.png)"
"application/octet-stream" // will show "All files (*)"
});
QFileDialog dialog(this);
dialog.setMimeTypeFilters(mimeTypeFilters);
dialog.exec();另请参阅 mimeTypeFilters()。
void QFileDialog::setNameFilter(const QString &filter)
将文件对话框中使用的过滤器设置为给定的filter 。
如果 `filter ` 包含一组圆括号,其中包含一个或多个以空格分隔的文件名通配符模式,则仅将圆括号内的文本用作过滤器。这意味着以下调用均等效:
dialog.setNameFilter("All C++ files (*.cpp *.cc *.C *.cxx *.c++)");
dialog.setNameFilter("*.cpp *.cc *.C *.cxx *.c++");注意:对于 Android 的原生文件对话框,由于仅支持 MIME 类型,因此会使用与给定名称过滤器匹配的 MIME 类型。
另请参阅 setMimeTypeFilters() 和setNameFilters()。
void QFileDialog::setNameFilters(const QStringList &filters)
设置文件对话框中使用的filters 。
请注意,过滤器*.*并不具备跨平台兼容性,因为“文件扩展名决定文件类型”这一历史假设在各个操作系统上并不一致。可能存在文件名中不含点(例如Makefile )的情况。 在原生 Windows 文件对话框中,*.*会匹配此类文件,但在其他类型的文件对话框中则可能无法匹配。因此,若您打算选择任意文件,最好使用*。
const QStringList filters({"Image files (*.png *.xpm *.jpg)",
"Text files (*.txt)",
"Any files (*)"
});
QFileDialog dialog(this);
dialog.setNameFilters(filters);
dialog.exec();setMimeTypeFilters() 的优势在于为每种文件类型提供了所有可能的名称过滤器。例如,JPEG 图像有三种可能的扩展名;如果您的应用程序可以打开此类文件,选择image/jpeg MIME 类型作为过滤器即可打开所有此类文件。
另请参阅 nameFilters()。
void QFileDialog::setOption(QFileDialog::Option option, bool on = true)
如果on 为true,则启用指定的option ;否则,清除指定的option 。
应在更改对话框属性或显示对话框之前设置选项(特别是DontUseNativeDialog 选项)。
在对话框可见时设置选项,不能保证会立即对对话框产生影响(这取决于选项和平台)。
在更改其他属性后设置选项可能会导致这些值不起作用。
另请参阅 options 和testOption()。
void QFileDialog::setProxyModel(QAbstractProxyModel *proxyModel)
将视图的模型设置为给定的proxyModel 。如果需要修改底层模型(例如添加列、过滤数据或添加驱动器),此操作非常有用。
任何现有的代理模型将被移除,但不会被删除。文件对话框将接管proxyModel 的所有权。
另请参阅 proxyModel()。
void QFileDialog::setSidebarUrls(const QList<QUrl> &urls)
设置位于侧边栏中的urls 。
例如:
QList<QUrl> urls;
urls << QUrl::fromLocalFile("/Users/foo/Code/qt5")
<< QUrl::fromLocalFile(QStandardPaths::standardLocations(QStandardPaths::MusicLocation).first());
QFileDialog dialog;
dialog.setSidebarUrls(urls);
dialog.setFileMode(QFileDialog::AnyFile);
if (dialog.exec()) {
// ...
}此时文件对话框将显示如下:

另请参阅 sidebarUrls()。
[override virtual] void QFileDialog::setVisible(bool visible)
重写了:QDialog::setVisible (bool visible)。
QList<QUrl> QFileDialog::sidebarUrls() const
返回当前侧边栏中包含的 URL 列表
另请参阅 setSidebarUrls()。
bool QFileDialog::testOption(QFileDialog::Option option) const
如果给定的option 已启用,则返回true ;否则,返回false。
[signal] void QFileDialog::urlSelected(const QUrl &url)
当选择内容发生变化且对话框被确认时,将发出此信号,并附带(可能为空的)所选url 。
另请参阅 currentUrlChanged() 和QDialog::Accepted 。
[signal] void QFileDialog::urlsSelected(const QList<QUrl> &urls)
当选择内容发生变化且对话框被确认时,将发出此信号,并附带一个包含所选urls 的列表(该列表可能为空)。
另请参阅 currentUrlChanged() 和QDialog::Accepted 。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.