QFileDialog Class

QFileDialog 类提供了一个允许用户选择文件或目录的对话框。更多

头文件: #include <QFileDialog>
CMake.QFileDialog find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
继承: QDialog

公共类型

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 的最简单方法是使用静态函数,如getOpenFileName() 。

fileName = QFileDialog::getOpenFileName(this,
    tr("Open Image"), "/home/jana", tr("Image Files (*.png *.jpg *.bmp)"));

在上例中,使用静态函数创建了一个模态 QFileDialog。该对话框最初显示"/home/jana "目录的内容,并显示与字符串 "Image Files (*.png *.jpg *.bmp) "中给出的模式匹配的文件。文件对话框的父窗口设置"打开图像",窗口标题设置为 "打开图像"。

如果要使用多个过滤器,请用两个分号分隔每个过滤器。例如

"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)" 。这意味着只有扩展名为pngxpmjpg 的文件才会显示在 QFileDialog 中。您可以使用setNameFilters() 应用多个过滤器。使用selectNameFilter() 可以选择其中一个过滤器作为文件对话框的默认过滤器。

文件对话框有两种视图模式:ListDetailList 以文件和目录名称列表的形式显示当前目录的内容。Detail 也显示文件和目录名称列表,但会在每个名称旁提供附加信息,如文件大小和修改日期。使用setViewMode() 设置模式:

dialog.setViewMode(QFileDialog::Detail);

创建自己的文件对话框时需要使用的最后一个重要函数是selectedFiles() 。

QStringList fileNames;
if (dialog.exec())
    fileNames = dialog.selectedFiles();

在上例中,创建并显示了一个模式文件对话框。如果用户点击确定,他们选择的文件将被放入fileName

对话框的工作目录可以用setDirectory() 设置。可以使用selectFile() 函数选择当前目录下的每个文件。

标准对话框示例展示了如何使用 QFileDialog 以及其他内置 Qt 对话框。

默认情况下,如果平台有本地文件对话框,则会使用该对话框。在这种情况下,原本用于构建对话框的部件不会被实例化,因此相关访问器(如layout() 和itemDelegate() )会返回空值。此外,并非所有平台都会显示带有标题栏的文件对话框,因此要注意用户可能看不到标题文本。您可以设置DontUseNativeDialog 选项或设置AA_DontUseNativeDialogs 应用程序属性,以确保使用基于 widget 的实现,而不是本地对话框。

另请参阅 QDir,QFileInfo,QFile,QColorDialog,QFontDialog标准对话框示例

成员类型文档

enum QFileDialog::AcceptMode

常数数值
QFileDialog::AcceptOpen0
QFileDialog::AcceptSave1

enum QFileDialog::DialogLabel

常数数值
QFileDialog::LookIn0
QFileDialog::FileName1
QFileDialog::FileType2
QFileDialog::Accept3
QFileDialog::Reject4

enum QFileDialog::FileMode

该枚举用于表示用户在文件对话框中可以选择的内容;也就是说,如果用户单击 "确定",对话框会返回什么内容。

常量文件名称
QFileDialog::AnyFile0文件名,无论是否存在。
QFileDialog::ExistingFile1单个现有文件的名称。
QFileDialog::Directory2目录名称。文件和目录都会显示。不过,本地 Windows 文件对话框不支持在目录选择器中显示文件。
QFileDialog::ExistingFiles3零个或多个现有文件的名称。

另请参阅 setFileMode()。

枚举 QFileDialog::Option
flags QFileDialog::Options

影响对话框行为的选项。

常量说明
QFileDialog::ShowDirsOnly0x00000001只显示目录。默认情况下,文件和目录都会显示。
This option is only effective in the Directory file mode.
QFileDialog::DontResolveSymlinks0x00000002不解析符号链接。默认情况下,会解析符号链接。
QFileDialog::DontConfirmOverwrite0x00000004如果选择了现有文件,则不要求确认。默认情况下会要求确认。
This option is only effective if acceptMode is AcceptSave). It is furthermore not used on macOS for native file dialogs.
QFileDialog::DontUseNativeDialog0x00000008不要使用平台原生的文件对话框,而要使用 Qt 提供的基于 widget 的对话框。
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::ReadOnly0x00000010表示模型为只读。
QFileDialog::HideNameFilterDetails0x00000020表示是否隐藏文件名筛选器详细信息。
QFileDialog::DontUseCustomDirectoryIcons0x00000040始终使用默认目录图标。
某些平台允许用户设置不同的图标,但自定义图标查找可能会在网络或移动硬盘上造成严重的性能问题。
Setting this will enable the DontUseCustomDirectoryIcons option in iconProvider().
该枚举值是在 Qt 5.2 中添加的。

Options 类型是QFlags<Option> 的类型定义。它存储 Option 值的 OR 组合。

另请参见 optionstestOption

enum QFileDialog::ViewMode

该枚举描述文件对话框的视图模式,即显示每个文件的哪些信息。

常量说明
QFileDialog::Detail0显示目录中每个项目的图标、名称和详细信息。
QFileDialog::List1只显示目录中每个项目的图标和名称。

另请参阅 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

此函数为FileNameAccept DialogLabel s 设置标签。在调用 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 类型。应用程序可以用它来声明支持哪些协议来获取文件内容。空列表表示不应用任何限制(默认)。对本地文件("文件 "方案)的支持是隐式的,始终处于启用状态;无需将其包含在限制中。

访问功能:

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 和 widgetflags 构建文件对话框。

[explicit] QFileDialog::QFileDialog(QWidget *parent = nullptr, const QString &caption = QString(), const QString &directory = QString(), const QString &filter = QString())

使用给定的parentcaption 构建文件对话框,该对话框最初显示指定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 widget 创建模式文件对话框。如果parent 不是nullptr ,对话框将居中显示在父窗口部件上。

对话框的工作目录被设为dir ,标题被设为caption 。其中任何一个都可以是空字符串,在这种情况下,将分别使用当前目录和默认标题。

options 参数包含运行对话框的各种选项。有关可以传递的标志的更多信息,请参阅QFileDialog::Option 枚举。为确保使用本地文件对话框,必须设置ShowDirsOnly

在 Windows 和 macOS 上,此静态函数使用本地文件对话框,而不是QFileDialog 。不过,Windows 本地文件对话框不支持在目录选择器中显示文件。要使用QFileDialog 显示文件,需要传递DontUseNativeDialog 选项或设置全局AA_DontUseNativeDialogs 应用程序属性。

请注意,macOS 本机文件对话框不显示标题栏。

在 Unix/X11 上,文件对话框的正常行为是解析和跟踪符号链接。例如,如果/usr/tmp 是指向/var/tmp 的符号链接,则在输入/usr/tmp 后,文件对话框会更改为/var/tmp 。如果options 包括DontResolveSymlinks ,文件对话框会将符号链接视为常规目录。

在 Windows 上,对话框会运行一个阻塞模式事件循环,该循环不会分派任何 QTimers,如果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() 类似。尤其是parentcaptiondiroptions 的使用方式完全相同。

QFileDialog::getExistingDirectory() 的主要区别在于用户可以选择远程目录。这就是为什么dir 的返回类型和类型都是QUrl 的原因。

supportedSchemes 参数允许限制用户可以选择的 URL 类型。这是应用程序声明其支持的获取文件内容的协议的一种方式。空列表表示不适用任何限制(默认情况)。对本地文件("文件 "方案)的支持是隐式的,始终处于启用状态;无需将其包含在限制中。

在可能的情况下,此静态函数使用本地文件对话框,而不是QFileDialog 。在不支持选择远程文件的平台上,Qt XML 只允许选择本地文件。

另请参阅 getExistingDirectory()、getOpenFileUrl()、getOpenFileUrls() 和getSaveFileUrl() 。

[static] void QFileDialog::getOpenFileContent(const QString &nameFilter, const std::function<void (const QString &, const QByteArray &)> &fileOpenCompleted, QWidget *parent = nullptr)

这是一个方便的静态函数,用于返回用户所选文件的内容。

如果网络沙盒限制文件访问,则可使用此函数在 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 widget 创建一个模态文件对话框。如果parent 不是nullptr ,对话框将居中显示在父窗口部件上。

文件对话框的工作目录设置为dir 。如果dir 包含文件名,则会选择该文件。只显示与给定的filter 匹配的文件。所选过滤器设置为selectedFilter 。参数dirselectedFilterfilter 可以是空字符串。如果需要多个过滤器,可以用";; "等分隔:

"Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml)"

options 参数包含有关如何运行对话框的各种选项。有关可以传递的标志的更多信息,请参阅QFileDialog::Option 枚举。

对话框的标题设置为caption 。如果未指定caption ,则将使用默认标题。

在 Windows 和 macOS 上,此静态函数使用本地文件对话框,而不是QFileDialog 。请注意,macOS 本地文件对话框不显示标题栏。

在 Windows 上,对话框会运行一个阻塞模式事件循环,该循环不会分派任何 QTimers,如果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 widget 创建一个模态文件对话框。如果parent 不是nullptr ,对话框将居中显示在父窗口部件上。

文件对话框的工作目录设置为dir 。如果dir 包含文件名,则会选择该文件。筛选器设置为filter ,因此只显示与筛选器匹配的文件。选择的过滤器设置为selectedFilter 。参数dirselectedFilterfilter 可以是空字符串。如果需要多个过滤器,可以用";; "等分隔:

"Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml)"

对话框的标题设置为caption 。如果未指定caption ,则使用默认标题。

在 Windows 和 macOS 上,此静态函数使用本地文件对话框,而不是QFileDialog 。请注意,macOS 本地文件对话框不显示标题栏。

在 Windows 上,对话框会运行一个阻塞模式事件循环,该循环不会分派任何 QTimers,如果parent 不是nullptr ,则会将对话框定位在父级标题栏的正下方。

在 Unix/X11 上,文件对话框的正常行为是解析和跟踪符号链接。例如,如果/usr/tmp 是指向/var/tmp 的符号链接,那么在输入/usr/tmp 后,文件对话框将变为/var/tmpoptions 参数包含有关如何运行对话框的各种选项,有关可以传递的标志的更多信息,请参阅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,selectedFilteroptions 的使用方式完全相同。

QFileDialog::getOpenFileName() 的主要区别在于用户可以选择远程文件。这就是为什么dir 的返回类型和类型都是QUrl 的原因。

supportedSchemes 参数可以限制用户可以选择的 URL 类型。应用程序可以用它来声明为获取文件内容而支持的协议。空列表表示不适用任何限制(默认值)。对本地文件("文件 "方案)的支持是隐式的,始终处于启用状态;不必将其包含在限制中。

在可能的情况下,此静态函数使用本地文件对话框,而不是QFileDialog 。在不支持选择远程文件的平台上,Qt XML 将只允许选择本地文件。

另请参阅 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,selectedFilteroptions 的使用方式完全相同。

QFileDialog::getOpenFileNames() 的主要区别在于用户可以选择远程文件。这就是为什么dir 的返回类型和类型分别是QList<QUrl> 和QUrl

supportedSchemes 参数允许限制用户可以选择的 URL 类型。应用程序可以用它来声明获取文件内容所支持的协议。空列表表示不适用任何限制(默认情况)。对本地文件("文件 "方案)的支持是隐式的,始终处于启用状态;不必将其包含在限制中。

在可能的情况下,此静态函数使用本地文件对话框,而不是QFileDialog 。在不支持选择远程文件的平台上,Qt XML 将只允许选择本地文件。

另请参阅 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 widget 创建一个模态文件对话框。如果parent 不是nullptr ,对话框将居中显示在父窗口部件上。

QString fileName = QFileDialog::getSaveFileName(this, tr("Save File"),
                           "/home/jana/untitled.png",
                           tr("Images (*.png *.xpm *.jpg)"));

文件对话框的工作目录设置为dir 。如果dir 包含文件名,则会选择该文件。只显示与filter 匹配的文件。选择的过滤器设置为selectedFilter 。参数dirselectedFilterfilter 可以是空字符串。多个过滤器之间用";; "分隔。例如

"Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml)"

options 参数包含有关如何运行对话框的各种选项,有关可以传递的标志的详细信息,请参阅QFileDialog::Option 枚举。

可以通过将selectedFilter 设置为所需值来选择默认过滤器。

对话框的标题设置为caption 。如果未指定caption ,则使用默认标题。

在 Windows 和 macOS 上,此静态函数使用本地文件对话框,而不是QFileDialog

在 Windows 上,该对话框会运行一个阻塞模式事件循环,不会分派任何 QTimers,如果parent 不是nullptr ,则会将对话框定位在父级标题栏的正下方。在 MacOS 上,由于使用的是本地文件对话框,过滤器参数会被忽略。

在 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,selectedFilteroptions 的使用方式完全相同。

QFileDialog::getSaveFileName() 的主要区别在于用户可以选择远程文件。这就是为什么dir 的返回类型和类型都是QUrl 的原因。

supportedSchemes 参数可以限制用户可以选择的 URL 类型。这是应用程序声明其支持的保存文件内容的协议的一种方式。空列表表示不适用任何限制(默认值)。对本地文件("文件 "方案)的支持是隐式的,并始终处于启用状态;无需将其包含在限制中。

在可能的情况下,此静态函数使用本地文件对话框,而不是QFileDialog 。在不支持选择远程文件的平台上,Qt XML 将只允许选择本地文件。

另请参阅 getSaveFileName()、getOpenFileUrl()、getOpenFileUrls() 和getExistingDirectoryUrl() 。

QStringList QFileDialog::history() const

以路径列表形式返回 filedialog 的浏览历史记录。

另请参阅 setHistory()。

QAbstractFileIconProvider *QFileDialog::iconProvider() const

返回 filedialog 使用的图标提供程序。

另请参阅 setIconProvider()。

QAbstractItemDelegate *QFileDialog::itemDelegate() const

返回用于在 filedialog 中的视图中呈现项目的项目委托。

另请参阅 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)

此函数显示对话框,并将receivermember 指定的槽连接到通知选择更改的信号。如果fileModeExistingFiles ,则是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 以向用户推荐文件名。

如果网络沙盒限制文件访问,则可使用此函数将内容保存到 Qt for WebAssembly 的本地文件中。通过该函数的实现,可在浏览器中显示本地文件对话框,用户可根据fileNameHint 参数指定输出文件。

parent 在 Qt for WebAssembly 上被忽略。在其他平台上,可通过 使弹出窗口成为另一个窗口小部件的子窗口。如果平台不支持本地文件对话框,函数将退回到 。parent QFileDialog

该函数是异步的,会立即返回。

QByteArray imageData; // obtained from e.g. QImage::save()
QFileDialog::saveFileContent(imageData, "myimage.png"); // with filename hint
// OR
QFileDialog::saveFileContent(imageData); // no filename hint

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)

设置当前文件类型filterfilter 中可以通过分号或空格分隔多个过滤器。

另请参阅 setNameFilter()、setNameFilters() 和selectedNameFilter()。

void QFileDialog::selectUrl(const QUrl &url)

在文件对话框中选择给定的url

注: 非本地QFileDialog 仅支持本地文件。

另请参阅 selectedUrls().

QStringList QFileDialog::selectedFiles() const

返回包含对话框中所选文件绝对路径的字符串列表。如果没有选择任何文件,或者模式不是ExistingFilesExistingFile ,selectedFiles() 将包含视口中的当前路径。

另请参阅 selectedNameFilter() 和selectFile()。

QString QFileDialog::selectedMimeTypeFilter() const

返回用户在文件对话框中选择的文件的 MIME 类型。

QString QFileDialog::selectedNameFilter() const

返回用户在文件对话框中选择的过滤器。

另请参阅 selectedFiles()。

QList<QUrl> QFileDialog::selectedUrls() const

返回包含对话框中所选文件的 url 列表。如果未选择任何文件,或模式不是ExistingFilesExistingFile ,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 表示下载位置。有关可能值的完整列表,请参阅有关KNOWNFOLDERID 的 MSDN 文档。此功能在 Qt 5.5 中添加。

另请参阅 directoryUrl() 和QUuid

void QFileDialog::setFilter(QDir::Filters filters)

将模型使用的过滤器设置为filters 。过滤器用于指定应显示的文件类型。

另请参阅 filter() 。

void QFileDialog::setHistory(const QStringList &paths)

设置 filedialog 的浏览历史包含给定的paths

另请参阅 history() 。

void QFileDialog::setIconProvider(QAbstractFileIconProvider *provider)

将 filedialog 使用的图标提供程序设置为指定的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 类型定义的 glob 模式和描述中创建名称过滤器。

所有文件 (*) "过滤器使用 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 选项)。

在对话框可见时设置选项并不能保证立即对对话框产生影响(取决于选项和平台)。

在更改其他属性后设置选项可能会导致这些值无效。

另请参阅 optionstestOption()。

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

返回当前侧边栏中的网址列表

另请参见 setSidebarUrls()。

bool QFileDialog::testOption(QFileDialog::Option option) const

如果给定的option 已启用,则返回true ;否则返回 false。

另请参阅 optionssetOption()。

[signal] void QFileDialog::urlSelected(const QUrl &url)

当选择发生变化且对话框被接受时,该信号将与所选(可能为空)url

另请参阅 currentUrlChanged() 和QDialog::Accepted

[signal] void QFileDialog::urlsSelected(const QList<QUrl> &urls)

当选择发生变化且对话框被接受时,该信号将与所选列表(可能为空)一起发出urls

另请参阅 currentUrlChanged() 和QDialog::Accepted

© 2025 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.