QFileDialog 类

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

头文件 #include <QFileDialog>
CMakefind_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmakeQT += widgets
继承 QDialog

公开类型

枚举AcceptMode { AcceptOpen, AcceptSave }
枚举DialogLabel { LookIn, FileName, FileType, Accept, Reject }
枚举FileMode { AnyFile, ExistingFile, Directory, ExistingFiles }
枚举Option { ShowDirsOnly, DontResolveSymlinks, DontConfirmOverwrite, DontUseNativeDialog, ReadOnly, …, DontUseCustomDirectoryIcons }
标志选项
枚举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())
虚拟~QFileDialog()
QFileDialog::AcceptModeacceptMode() const
QStringdefaultSuffix() const
QDirdirectory() const
QUrldirectoryUrl() const
QFileDialog::FileModefileMode() const
QDir::Filtersfilter() const
QStringListhistory() const
QAbstractFileIconProvider *iconProvider() const
QAbstractItemDelegate *itemDelegate() const
QStringlabelText(QFileDialog::DialogLabel label) const
QStringListmimeTypeFilters() const
QStringListnameFilters() const
void打开(QObject *receiver, const char *member)
QFileDialog::选项options() const
QAbstractProxyModel *proxyModel() const
boolrestoreState(const QByteArray &state)
QByteArraysaveState() const
voidselectFile(const QString &filename)
voidselectMimeTypeFilter(const QString &filter)
voidselectNameFilter(const QString &filter)
voidselectUrl(const QUrl &url)
QStringListselectedFiles() const
QStringselectedMimeTypeFilter() const
QStringselectedNameFilter() const
QList<QUrl>selectedUrls() const
voidsetAcceptMode(QFileDialog::AcceptMode mode)
voidsetDefaultSuffix(const QString &suffix)
voidsetDirectory(const QString &directory)
voidsetDirectory(const QDir &directory)
voidsetDirectoryUrl(const QUrl &directory)
voidsetFileMode(QFileDialog::FileMode mode)
voidsetFilter(QDir::Filters filters)
voidsetHistory(const QStringList &paths)
voidsetIconProvider(QAbstractFileIconProvider *provider)
voidsetItemDelegate(QAbstractItemDelegate *delegate)
voidsetLabelText(QFileDialog::DialogLabel label, const QString &text)
voidsetMimeTypeFilters(const QStringList &filters)
voidsetNameFilter(const QString &filter)
voidsetNameFilters(const QStringList &filters)
voidsetOption(QFileDialog::Option option, bool on = true)
voidsetOptions(QFileDialog::Options options)
voidsetProxyModel(QAbstractProxyModel *proxyModel)
voidsetSidebarUrls(const QList<QUrl> &urls)
voidsetSupportedSchemes(const QStringList &schemes)
voidsetViewMode(QFileDialog::ViewMode mode)
QList<QUrl>sidebarUrls() const
QStringListsupportedSchemes() const
booltestOption(QFileDialog::Option option) const
QFileDialog::ViewModeviewMode() const

重新实现公共函数

virtual voidsetVisible(bool visible) override

信号

voidcurrentChanged(const QString &path)
voidcurrentUrlChanged(const QUrl &url)
voiddirectoryEntered(const QString &directory)
voiddirectoryUrlEntered(const QUrl &directory)
voidfileSelected(const QString &file)
voidfilesSelected(const QStringList &selected)
voidfilterSelected(const QString &filter)
voidurlSelected(const QUrl &url)
voidurlsSelected(const QList<QUrl> &urls)

静态公共成员

QStringgetExistingDirectory(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), QFileDialog::Options options = ShowDirsOnly)
QUrlgetExistingDirectoryUrl(QWidget *parent = nullptr, const QString &caption = QString(), const QUrl &dir = QUrl(), QFileDialog::Options options = ShowDirsOnly, const QStringList &supportedSchemes = QStringList())
voidgetOpenFileContent(const QString &nameFilter, const std::function<void (const QString &, const QByteArray &)> &fileOpenCompleted, QWidget *parent = nullptr)
QStringgetOpenFileName(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options())
QStringListgetOpenFileNames(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options())
QUrlgetOpenFileUrl(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())
QStringgetSaveFileName(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options())
QUrlgetSaveFileUrl(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())
voidsaveFileContent(const QByteArray &fileContent, const QString &fileNameHint, QWidget *parent = nullptr)

重写的保护函数

virtual voidaccept() 覆盖
virtual voidchangeEvent(QEvent *e) 覆盖
virtual voiddone(int result) 覆盖

详细描述

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)"中给出的模式匹配的文件。文件对话框的父对象设置为this,窗口标题设置为"Open Image"。

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

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

您可以通过调用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对话框。

默认情况下,如果平台有平台本机文件对话框,则会使用平台本机文件对话框。在这种情况下,构建对话框的控件不会被实例化,所以相关的访问器如布局()和项目代理()返回null。此外,并非所有平台都会显示带有标题栏的文件对话框,因此请注意,标题文本可能对用户不可见。您可以通过设置DontUseNativeDialog选项或设置AA_DontUseNativeDialogs应用程序属性来确保使用基于小部件实现而不是原生对话框。

有关更多信息,请参阅QDirQFileInfoQFileQColorDialogQFontDialog标准对话框示例

成员类型文档

枚举QFileDialog::AcceptMode

常量
QFileDialog::AcceptOpen0
QFileDialog::AcceptSave1

枚举QFileDialog::DialogLabel

常量
QFileDialog::LookIn0
QFileDialog::FileName1
QFileDialog::FileType2
QFileDialog::Accept3
QFileDialog::Reject4

枚举 QFileDialog::FileMode

此枚举用于指示用户可能在文件对话框中选择的内容;即用户点击“确定”按钮时对话框返回的内容。

常量描述
QFileDialog::AnyFile0文件名,无论是否存在。
QFileDialog::ExistingFile1单个现有文件的名称。
QFileDialog::Directory2目录的名称。既显示文件也显示目录。但是,原生Windows文件对话框不支持在目录选择器中显示文件。
QFileDialog::ExistingFiles3零个或多个现有文件的名称。

另请参阅setFileMode().

枚举 QFileDialog::Option
标志 QFileDialog::Options

影响对话框行为的选项。

常量描述
QFileDialog::ShowDirsOnly0x00000001仅显示目录。默认情况下,既显示文件也显示目录。
此选项仅在Directory文件模式中有效。
QFileDialog::DontResolveSymlinks0x00000002不解析符号链接。默认情况下,解析符号链接。
QFileDialog::DontConfirmOverwrite0x00000004如果选择现有文件不请求确认。默认情况下,请求确认。
此选项仅在acceptModeAcceptSave时有效。此外,在macOS上使用原生文件对话框时不使用此选项。
QFileDialog::DontUseNativeDialog0x00000008不使用平台原生的文件对话框,而使用Qt提供的基于小部件的对话框。
默认情况下显示原生文件对话框,除非你使用包含QFileDialog的子类,该子类包含Q_OBJECT宏,设置了全局AA_DontUseNativeDialogs应用程序属性,或者平台没有你所需要的类型的原生对话框。
为了使选项有效,您必须在更改对话框的其他属性或显示对话框之前设置它。
QFileDialog::ReadOnly0x00000010指示模型为只读。
QFileDialog::HideNameFilterDetails0x00000020指示是否隐藏文件名筛选器详情。
QFileDialog::DontUseCustomDirectoryIcons0x00000040始终使用默认目录图标。
某些平台允许用户设置不同的图标,但自定义图标查找可能会在网络或移动驱动器上造成显著的性能问题。
设置此选项将启用DontUseCustomDirectoryIcons选项iconProvider
此枚举值是在Qt 5.2中添加的。

Options类型是QFlags<Option>的typedef。它存储Option值的按位或组合。

另请参阅optionstestOption

枚举 QFileDialog::ViewMode

此枚举描述了文件对话框的查看模式;即显示每个文件的哪些信息。

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

另请参阅setViewMode

属性文档

acceptMode : AcceptMode

此属性包含对话框的接受模式。

操作模式定义了对话框是为打开文件还是保存文件而设计的。

默认情况下,此属性设置为AcceptOpen

访问函数

QFileDialog::AcceptModeacceptMode() const
voidsetAcceptMode(QFileDialog::AcceptMode mode)

参见AcceptMode.

defaultSuffix : QString

添加到文件名中的后缀,如果没有指定其他后缀。

此属性指定添加到无后缀的文件名中的字符串。后缀通常用于指示文件类型(例如,“txt”指示文本文件)。

如果第一个字符是点(`.`),则将其移除。

访问函数

QStringdefaultSuffix() const
voidsetDefaultSuffix(const QString &suffix)

fileMode : FileMode

该属性存放对话框的文件模式。

文件模式定义了用户在对话框中期望选择的项目数量和类型。

默认情况下,此属性设置为任何文件

此功能设置文件名接受对话框标签的标签。在调用 setFileMode() 后可以设置自定义文本。

访问函数

QFileDialog::FileModefileMode() const
voidsetFileMode(QFileDialog::FileMode mode)

参见FileMode.

options : Options

该属性包含影响对话框外观和感觉的各种选项。

默认情况下,所有选项都被禁用。

在更改对话框属性或显示对话框之前应设置选项(特别是不使用本地对话框选项)。

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

更改其他属性后设置选项可能导致这些值没有效果。

访问函数

QFileDialog::选项options() const
voidsetOptions(QFileDialog::Options options)

参见setOption() 和 testOption().

supportedSchemes : QStringList

该属性包含文件对话框应允许导航到的URL方案。

设置此属性可以限制用户可以选择的URL类型。这是应用程序声明支持检索文件内容协议的一种方式。空列表表示不应用限制(默认)。对本地文件(“file”方案)的支持是隐含的,始终启用;不需要将其包含在限制中。

访问函数

QStringListsupportedSchemes() const
voidsetSupportedSchemes(const QStringList &schemes)

viewMode : ViewMode

该属性包含在对话框中显示文件和目录的方式。

默认情况下,使用详细模式来显示文件和目录的信息。

访问函数

QFileDialog::ViewModeviewMode() const
voidsetViewMode(QFileDialog::ViewMode mode)

参见ViewMode.

成员函数文档

QFileDialog::QFileDialog(QWidget *parent, Qt::WindowFlags flags)

使用指定的 parent 和控件 flags 构造文件对话框。

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

使用指定的 parentcaption 构造文件对话框,并最初显示指定 directory 的内容。目录的内容将通过一个由 filter 指定的分号分隔的过滤器列表进行过滤,然后再显示在对话框中。

[虚拟 noexcept] QFileDialog::~QFileDialog()

销毁文件对话框。

[覆盖虚拟受保护] void QFileDialog::accept()

重新实现: QDialog::accept.

[覆盖虚拟受保护] void QFileDialog::changeEvent(QEvent *e)

重新实现: QWidget::changeEvent(QEvent *event).

[信号] void QFileDialog::currentChanged(const QString &path)

当地当前文件更改时,此信号会发出新的文件名作为 path 参数。

另请参阅filesSelected.

[信号] void QFileDialog::currentUrlChanged(const QUrl &url)

当地当前文件更改时,此信号会发出新的文件 URL 作为 url 参数。

另请参阅urlsSelected.

QDir QFileDialog::directory() const

返回对话框中目前显示的目录。

另请参阅setDirectory.

[信号] void QFileDialog::directoryEntered(const QString &directory)

在本地操作中,当用户输入 directory 时,会发出此信号。

QUrl QFileDialog::directoryUrl() const

返回对话框中目前显示的目录的 URL。

另请参阅setDirectoryUrl.

[信号] void QFileDialog::directoryUrlEntered(const QUrl &directory)

当用户输入一个目录时,会发出此信号。

[重写虚保护] void QFileDialog::done(int result)

重实现: QDialog::done(int r)。

[信号] void QFileDialog::fileSelected(const QString &file)

当选择改变且对话框被接受时,此信号会发出所选择的(可能为空)文件。

也见: currentChanged() 以及 QDialog::Accepted

[信号] void QFileDialog::filesSelected(const QStringList &selected)

当选择改变且对话框被接受时,此信号会发出所选择的(可能为空)文件列表。

也见: currentChanged() 以及 QDialog::Accepted

QDir::Filters QFileDialog::filter() const

返回用于显示文件时使用的过滤器。

也见: setFilter

[信号] void QFileDialog::filterSelected(const QString &filter)

当用户选择一个过滤器时,会发出此信号。

[静态] 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 选项,或将全局 Qt::AA_DontUseNativeDialogs 应用程序属性设置为使用 QFileDialog 显示文件。

请注意,macOS原生的文件对话框不会显示标题栏。

在Unix/X11上,文件对话框的正常行为是解析和跟随符号链接。例如,如果/usr/tmp是一个指向/var/tmp的符号链接,当输入/usr/tmp后,文件对话框将切换到/var/tmp。如果options包含DontResolveSymlinks,则文件对话框将把符号链接当作普通目录处理。

在Windows上,对话框会旋转一个阻塞的模态事件循环,不调度任何QTimers,如果parent不是nullptr,则将对话框定位在父窗口标题栏下方。

警告:不要在对话框执行期间删除parent。如果您需要这样做,您必须自己创建对话框,使用QFileDialog的某种构造函数。

另请参阅getOpenFileName(),getOpenFileNames()和getSaveFileName()。

[静态] 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的类型。这是应用程序声明支持获取文件内容协议的一种方式。空列表表示不应用任何限制(默认值)。对本地文件("file"方案)的支持是隐含的,并始终启用;不需要包含它在内的限制。

如果可能,此静态函数会使用原生文件对话框而不是QFileDialog。在不支持选择远程文件的平台,Qt允许选择仅本地文件。

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

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

这是一个便利的静态函数,它返回用户选择的文件的内容。

使用此函数来访问Qt for WebAssembly上的本地文件,如果Web沙箱限制了文件访问。其实现在浏览器中显示原生文件对话框,用户根据nameFilter参数选择文件。

在WebAssembly版本的Qt中会被忽略。在其他平台上传递参数,以便使弹出窗口成为另一个小部件的孩子。如果平台不支持原生文件对话框,则函数会回退到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);

[静态] QString QFileDialog::getOpenFileName(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QFileDialog::Options options = Options())

这是一个方便的静态函数,它返回用户选择的现有文件。如果用户点击取消,则返回空字符串。

QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"),
                                                "/home",
                                                tr("Images (*.png *.xpm *.jpg)"));

该函数创建一个具有指定小部件的模式文件对话框。如果不为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,则文件对话框将把符号链接当作普通目录处理。

警告:不要在对话框执行期间删除parent。如果您需要这样做,您必须自己创建对话框,使用QFileDialog的某种构造函数。

另请参阅getOpenFileNames()、getSaveFileName()和getExistingDirectory

[静态] QStringList QFileDialog::getOpenFileNames(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), 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。参数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 枚举。

警告:不要在对话框执行期间删除parent。如果您需要这样做,您必须自己创建对话框,使用QFileDialog的某种构造函数。

另请参阅 getOpenFileName(),getSaveFileName() 及 getExistingDirectory()。

[静态] QUrl QFileDialog::getOpenFileUrl(QWidget *parent = nullptr, const QString &caption = QString(), const QUrl &dir = QUrl(), const QString &filter = QString(), QFileDialog::Options options = Options(), const QStringList &supportedSchemes = QStringList())

这是一个方便的静态函数,它返回用户选择的现有文件。如果用户按下取消按钮,它将返回一个空的 URL。

此函数的用法与 QFileDialog::getOpenFileName 类似。特别是 parentcaptiondirfilterselectedFilteroptions 的使用方式完全相同。

QFileDialog::getOpenFileName() 的主要区别在于提供给用户的选远程文件的能力。这就是为什么返回类型和 dir 的类型都是 QUrl

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

当可能时,此静态函数使用原生文件对话框而不是 QFileDialog。在不支持选择远程文件的平台上,Qt 允许选择仅为本地文件。

另请参阅 getOpenFileName()、getOpenFileUrls()、getSaveFileUrl() 和 getExistingDirectoryUrl()。

[静态] 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() 类似。特别是 parentcaptiondirfilterselectedFilteroptions 的用法完全相同。

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

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

当可能时,此静态函数使用原生文件对话框而不是 QFileDialog。在不支持选择远程文件的平台上,Qt 允许选择仅为本地文件。

另请参阅getOpenFileNames()、getOpenFileUrl()、getSaveFileUrl() 和 getExistingDirectoryUrl

[静态] 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。参数 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,则文件对话框将把符号链接当作普通目录处理。

警告:不要在对话框执行期间删除parent。如果您需要这样做,您必须自己创建对话框,使用QFileDialog的某种构造函数。

另请参阅getOpenFileName(),getOpenFileNames() 和 getExistingDirectory()。

[静态] QUrl QFileDialog::getSaveFileUrl(QWidget *parent = nullptr, const QString &caption = QString(), const QUrl &dir = QUrl(), const QString &filter = QString(), QFileDialog::Options options = Options(), const QStringList &supportedSchemes = QStringList())

这是一个方便的静态函数,它返回用户选择的文件。该文件不需要存在。如果用户按下取消,它返回一个空的 URL。

此函数的使用方式类似于 QFileDialog::getSaveFileName。特别是 parentcaptiondirfilterselectedFilteroptions 正是以完全相同的方式使用的。

QFileDialog::getSaveFileName() 的主要区别在于提供给用户选择远程文件的能力。这就是为什么返回类型和 dir 的类型是 QUrl

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

当可能时,此静态函数使用原生文件对话框而不是 QFileDialog。在不支持选择远程文件的平台上,Qt 允许选择仅为本地文件。

另请参阅getSaveFileNamegetOpenFileUrlgetOpenFileUrlsgetExistingDirectoryUrl

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)

此函数显示对话框,并将由receivermember指定的槽连接到通知选择变化的信号。如果fileModeExistingFiles,则这是filesSelected()信号,否则是fileSelected()信号。

当对话框关闭时,信号将断开与槽的连接。

QAbstractProxyModel *QFileDialog::proxyModel() const

返回由文件对话框使用的代理模型。默认不设置代理。

另请参阅 setProxyModel().

bool QFileDialog::restoreState(const QByteArray &state)

将对话框的布局、历史和当前目录恢复到指定的state

通常与QSettings一起使用以从过去会话中还原大小。

如果有错误返回false

[静态] void QFileDialog::saveFileContent(const QByteArray &fileContent, const QString &fileNameHint, QWidget *parent = nullptr)

这是一个方便的静态函数,它将fileContent保存到用户选择的文件名和位置中。fileNameHint可以提供以向用户建议文件名。

用于将内容保存到本地文件的WebAssembly上的Qt,如果Web沙盒限制了文件访问。其实现在浏览器中显示原生文件对话框,用户根据fileNameHint参数指定输出文件。

在WebAssembly版本的Qt中会被忽略。在其他平台上传递参数,以便使弹出窗口成为另一个小部件的孩子。如果平台不支持原生文件对话框,则函数会回退到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)

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

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

设置文件对话框的当前目录url。

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

注意:在Windows上,可以传递表示其中一个虚拟文件夹(如“计算机”或“网络”)的URL。这是通过使用带有代码clsid方案的QUrl来完成的,后面跟着去掉大括号的CLSID值。例如,URL clsid: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)

将文件对话框的浏览历史设置为包含指定的paths

另请参阅:history

void QFileDialog::setIconProvider(QAbstractFileIconProvider *provider)

将文件对话框使用的图标提供者设置为指定的provider

另请参阅:iconProvider

void QFileDialog::setItemDelegate(QAbstractItemDelegate *delegate)

将用于在文件对话框中的视图中渲染项目的项目委托设置为给定的delegate

任何现有的委托都将被移除,但不会被删除。《QFileDialog》不对delegate拥有权。

警告:你应在视图中不共享同一个委托的实例。这样做可能会导致不正确或不可直观的编辑行为,因为每个连接到给定委托的视图都可能接收到closeEditor()信号,并尝试访问、修改或关闭已经关闭的编辑器。

请注意所使用的模型是QFileSystemModel。它有自定义的项目数据角色,这由Roles枚举描述。如果你想只使用自定义图标,你可以使用QFileIconProvider

另请参阅:itemDelegatesetIconProviderQFileSystemModel

void QFileDialog::setLabelText(QFileDialog::DialogLabel label, const QString &text)

将文件对话框在指定的label中显示的text设置为。

另请参阅:labelText

void QFileDialog::setMimeTypeFilters(const QStringList &filters)

将文件对话框中使用的筛选器从MIME类型列表中设置。

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)

将文件对话框中使用的筛选器设置为给定的筛选器

如果筛选器包含包含一个或多个文件名通配符模式的一对圆括号,并用空格分隔,则只使用括号内的文本作为筛选器。这意味着这些调用都是等价的

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)

设置文件对话框使用的筛选器

请注意,筛选器*.*不可移植,因为文件扩展名确定文件类型的假设在各个操作系统上并不一致。可能有不带点的文件名(例如,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

在更改对话框属性或显示对话框之前应设置选项(特别是不使用本地对话框选项)。

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

更改其他属性后设置选项可能导致这些值没有效果。

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

[重写虚函数] 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。

另请参阅 optionssetOption().

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

当选择更改且对话框被接受时,将以(可能为空)选中url发出此信号。

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

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

当选择更改且对话框被接受时,将以(可能为空)选中urls的列表发出此信号。

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

© 2024 Qt 公司有限公司。此处包含的文档贡献是各自所有者的版权。此处提供的文档是根据自由软件基金会发布的GNU自由文档许可证版本1.3的条款许可的。Qt和相应的标志是芬兰的Qt公司及其在全球的分公司/子公司的商标。所有其他商标均为其各自所有者的财产。