QFileDialog
类提供了一个对话框,允许用户选择文件或目录。
QFileDialog
类使用户能够遍历文件系统以选择一个或多个文件或目录。
创建QFileDialog
最简单的方法是使用静态函数。
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)"
您可以在不使用静态函数的情况下创建自己的QFileDialog
。通过调用setFileMode()
,可以指定用户在对话框中必须选择的内容:
QFileDialog dialog(this);
dialog.setFileMode(QFileDialog::AnyFile);
在上面的示例中,文件对话框的模式设置为AnyFile
,意味着用户可以选择任意文件甚至可以指定不存在的文件。这种模式对于"Save As"
文件对话框很有用。如果用户必须选择现有文件,则使用ExistingFile
;如果只能选择目录,则使用Directory
。
fileMode
属性包含对话框的操作模式;这表示用户预期选择的对象类型。使用setNameFilter()
设置对话框的文件过滤器。例如:
dialog.setNameFilter(tr("Images (*.png *.xpm *.jpg)"));
在上面的示例中,过滤器设置为"Images (*.png *.xpm *.jpg)"
,这意味着只扩展名为png
、xpm
或jpg
的文件将显示在QFileDialog
中。您可以使用setNameFilters()
应用多个过滤器。使用selectNameFilter()
来选择一个过滤器作为文件对话框的默认过滤器。
文件对话框有两种视图模式:列表
和详细信息
。列表
以文件和目录名称列表的形式显示当前目录的内容。详细信息
也显示文件和目录名称的列表,但在每个名称旁边提供更多信息,比如文件大小和修改日期。使用setView()
设置模式:
dialog.setViewMode(QFileDialog::Detail);
创建自己的文件对话框时,还需要使用selectedFiles()
函数。
QStringList fileNames;
if (dialog.exec())
fileNames = dialog.selectedFiles();
在上面的示例中,创建并显示了一个模态文件对话框。如果用户点击了确定,所选文件将放在fileNames
中。
可以使用setDirectory()
设置对话框的工作录。使用selectFile()
函数可以选择当前录中的每个文件。
标准对话框示例展示了如何使用QFileDialog
以及其他内置的Qt对话框。
默认情况下,如果平台有原生的文件对话框,将使用它。在这种情况下,用于构建对话框的小部件将不会被实化,因此相关的访问器(例如layout()和itemDelegate())将返回null。您可以设置DontUseNativeDialog
选项,以确保使用基于小部件的实现而不是原生对话框。
// 接受模式
enum AcceptMode { AcceptOpen, AcceptSave }
// 文本
enum DialogLabel { LookIn, FileName, FileType, Accept, Reject }
// 文件模式
enum FileMode { AnyFile, ExistingFile, Directory, ExistingFiles, DirectoryOnly }
// 选项
enum Option { ShowDirsOnly, DontResolveSymlinks, DontConfirmOverwrite, DontUseNativeDialog, ..., DontUseCustomDirectoryIcons }
// 标志
flags Options
// 视图
enum ViewMode { Detail, List }
// 获取已存在目录
QString getExistingDirectory(QWidget *parent = Q_NULLPTR, const QString &caption = QString(), const QString &dir = QString(), Options options = ShowDirsOnly)
// 获取已存在目录Url
QUrl getExistingDirectoryUrl(QWidget *parent = Q_NULLPTR, const QString &caption = QString(), const QUrl &dir = QUrl(), Options options = ShowDirsOnly, const QStringList &supportedSchemes = QStringList())
// 获取打开的文件
QString getOpenFileName(QWidget *parent = Q_NULLPTR, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = Q_NULLPTR, Options options = Options())
// 获取打开的文件列表
QStringList getOpenFileNames(QWidget *parent = Q_NULLPTR, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = Q_NULLPTR, Options options = Options())
// 获取打开的文件Url
QUrl getOpenFileUrl(QWidget *parent = Q_NULLPTR, const QString &caption = QString(), const QUrl &dir = QUrl(), const QString &filter = QString(), QString *selectedFilter = Q_NULLPTR, Options options = Options(), const QStringList &supportedSchemes = QStringList())
// 获取打开的文件Url列表
QList<QUrl> getOpenFileUrls(QWidget *parent = Q_NULLPTR, const QString &caption = QString(), const QUrl &dir = QUrl(), const QString &filter = QString(), QString *selectedFilter = Q_NULLPTR, Options options = Options(), const QStringList &supportedSchemes = QStringList())
// 获取保存的文件
QString getSaveFileName(QWidget *parent = Q_NULLPTR, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = Q_NULLPTR, Options options = Options())
// 获取保存的文件Url
QUrl getSaveFileUrl(QWidget *parent = Q_NULLPTR, const QString &caption = QString(), const QUrl &dir = QUrl(), const QString &filter = QString(), QString *selectedFilter = Q_NULLPTR, Options options = Options(), const QStringList &supportedSchemes = QStringList())
acceptMode()
:获取文件对话框的接受模式。这决定了用户选择文件后,哪些文件会被接受并返回。可能的值包括:QFileDialog::AnyFile, QFileDialog::ExistingFile, QFileDialog::DirectoryOnly。defaultSuffix()
:获取文件对话框的默认后缀。如果用户没有输入文件名,那么会使用这个后缀。directory()
:获取文件对话框当前显示的目录。directoryUrl()
:获取文件对话框当前显示的目录的URL。fileMode()
:获取文件对话框的文件模式。这决定了对话框是用于打开文件还是创建新文件。可能的值包括:QFileDialog::AnyFile, QFileDialog::ExistingFile, QFileDialog::Directory, QFileDialog::DirectoryOnly。filter()
:获取文件对话框的过滤器设置。这些过滤器用于限制用户可以选择哪些类型的文件。history()
:获取文件对话框的历史记录。这些记录包含了用户之前访问过的目录。iconProvider()
:获取文件对话框的图标提供器。这个提供器用于提供文件和目录的图标。itemDelegate()
:获取文件对话框的项目代理。这个代理用于绘制和编辑文件和目录的条目。labelText(DialogLabel label)
:获取给定标签的标签文本。mimeTypeFilters()
:获取文件对话框的MIME类型过滤器。这些过滤器用于限制用户可以选择哪些类型的文件。nameFilters()
:获取文件对话框的名称过滤器。这些过滤器用于限制用户可以选择哪些类型的文件或目录。open(QObject *receiver, const char *member)
:打开文件对话框,并在用户选择了一个文件或目录后,发送一个信号给指定的接收器。options()
:获取文件对话框的选项。这些选项可以控制对话框的行为。proxyModel()
:获取文件对话框的代理模型。这个模型用于组织和过滤目录中的项目。restoreState(const QByteArray &state)
:尝试从给定的状态字节数组中恢复文件对话框的状态。如果成功,返回true;否则返回false。saveState()
:返回一个包含当前文件对话框状态的字节数组。这个状态可以用于以后恢复对话框的状态。void selectFile(const QString &filename)
: 选择指定的文件进行打开或保存。void selectMimeTypeFilter(const QString &filter)
: 设置MIME类型过滤器,用于限制用户可以选择哪些类型的文件。void selectNameFilter(const QString &filter)
: 设置名称过滤器,用于限制用户可以选择哪些类型的文件或目录。void selectUrl(const QUrl &url)
: 选择指定的URL进行打开或保存。QStringList selectedFiles() const
: 返回用户选择的文件列表。QString selectedMimeTypeFilter() const
: 返回用户选择的MIME类型过滤器。QString selectedNameFilter() const
: 返回用户选择的名称过滤器。QList selectedUrls() const
: 返回用户选择的URL列表。void setAcceptMode(AcceptMode mode)
: 设置文件对话框的接受模式,如QFileDialog::AnyFile, QFileDialog::ExistingFile, QFileDialog::DirectoryOnly等。void setDefaultSuffix(const QString &suffix)
: 设置默认的后缀,如果用户没有输入文件名,那么会使用这个后缀。void setDirectory(const QString &directory)
: 设置文件对话框当前显示的目录。void setDirectory(const QDir &directory)
: 与上一个函数相同,设置文件对话框当前显示的目录。void setDirectoryUrl(const QUrl &directory)
: 设置文件对话框当前显示的目录的URL。void setFileMode(FileMode mode)
: 设置文件对话框的文件模式,如QFileDialog::AnyFile, QFileDialog::ExistingFile, QFileDialog::Directory, QFileDialog::DirectoryOnly等。void setFilter(QDir::Filters filters)
: 设置文件对话框的过滤器设置,用于限制用户可以选择哪些类型的文件。void setHistory(const QStringList &paths)
: 设置文件对话框的历史记录,这些记录包含了用户之前访问过的目录。void setIconProvider(QFileIconProvider *provider)
: 设置文件对话框的图标提供器,用于提供文件和目录的图标。void setItemDelegate(QAbstractItemDelegate *delegate)
: 设置文件对话框的项目代理,用于绘制和编辑文件和目录的条目。void setLabelText(DialogLabel label, const QString &text)
: 设置给定标签的标签文本。void setMimeTypeFilters(const QStringList &filters)
: 设置文件对话框的MIME类型过滤器,用于限制用户可以选择哪些类型的文件。void setNameFilter(const QString &filter)
: 设置文件对话框的名称过滤器,用于限制用户可以选择哪些类型的文件或目录。void setNameFilters(const QStringList &filters)
: 与上一个函数相同,设置文件对话框的名称过滤器。void setOption(Option option, bool on = true)
: 设置文件对话框的选项,可以控制对话框的行为。void setOptions(Options options)
: 与上一个函数相同,设置文件对话框的选项。void setProxyModel(QAbstractProxyModel *proxyModel)
: 设置文件对话框的代理模型,用于组织和过滤目录中的项目。void setSidebarUrls(const QList &urls)
: 设置文件对话框的侧边栏URL列表。void setSupportedSchemes(const QStringList &schemes)
: 设置文件对话框支持的URL方案列表。void setViewMode(ViewMode mode)
: 设置文件对话框的视图模式。QList sidebarUrls() const
: 返回文件对话框的侧边栏URL列表。QStringList supportedSchemes() const
: 返回文件对话框支持的URL方案列表。bool testOption(Option option) const
: 测试文件对话框是否具有指定的选项。ViewMode viewMode() const
: 返回文件对话框的视图模式。打开文件:用户可以使用QFileDialog打开一个或多个文件,以便读取文件内容或操作文件数据。
保存文件:用户可以使用QFileDialog选择保存文件的目标路径和文件名,并将数据写入该文件。
选择文件夹:QFileDialog也可以用于选择文件夹路径,而不是具体的文件。
文件过滤:可以使用QFileDialog设置文件过滤器,限制用户只能选择特定类型的文件,以便过滤掉不支持的文件类型。
历史路径:QFileDialog可以保存用户最近打开或保存的文件,以便在下次打开对话框时提供快速访问。
自定义UI:QFileDialog提供了许多可自定义的选项,可以根据需要调整对话框的外观和行为,以匹配应用程序的需求。