【Qt控件之QFileDialog】详解
  yQAl4kecrO8W 2023年12月23日 33 0


描述

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)",这意味着只扩展名为pngxpmjpg的文件将显示在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())
公有成员方法
  1. acceptMode():获取文件对话框的接受模式。这决定了用户选择文件后,哪些文件会被接受并返回。可能的值包括:QFileDialog::AnyFile, QFileDialog::ExistingFile, QFileDialog::DirectoryOnly。
  2. defaultSuffix():获取文件对话框的默认后缀。如果用户没有输入文件名,那么会使用这个后缀。
  3. directory():获取文件对话框当前显示的目录。
  4. directoryUrl():获取文件对话框当前显示的目录的URL。
  5. fileMode():获取文件对话框的文件模式。这决定了对话框是用于打开文件还是创建新文件。可能的值包括:QFileDialog::AnyFile, QFileDialog::ExistingFile, QFileDialog::Directory, QFileDialog::DirectoryOnly。
  6. filter():获取文件对话框的过滤器设置。这些过滤器用于限制用户可以选择哪些类型的文件。
  7. history():获取文件对话框的历史记录。这些记录包含了用户之前访问过的目录。
  8. iconProvider():获取文件对话框的图标提供器。这个提供器用于提供文件和目录的图标。
  9. itemDelegate():获取文件对话框的项目代理。这个代理用于绘制和编辑文件和目录的条目。
  10. labelText(DialogLabel label):获取给定标签的标签文本。
  11. mimeTypeFilters():获取文件对话框的MIME类型过滤器。这些过滤器用于限制用户可以选择哪些类型的文件。
  12. nameFilters():获取文件对话框的名称过滤器。这些过滤器用于限制用户可以选择哪些类型的文件或目录。
  13. open(QObject *receiver, const char *member):打开文件对话框,并在用户选择了一个文件或目录后,发送一个信号给指定的接收器。
  14. options():获取文件对话框的选项。这些选项可以控制对话框的行为。
  15. proxyModel():获取文件对话框的代理模型。这个模型用于组织和过滤目录中的项目。
  16. restoreState(const QByteArray &state):尝试从给定的状态字节数组中恢复文件对话框的状态。如果成功,返回true;否则返回false。
  17. saveState():返回一个包含当前文件对话框状态的字节数组。这个状态可以用于以后恢复对话框的状态。
  18. void selectFile(const QString &filename): 选择指定的文件进行打开或保存。
  19. void selectMimeTypeFilter(const QString &filter): 设置MIME类型过滤器,用于限制用户可以选择哪些类型的文件。
  20. void selectNameFilter(const QString &filter): 设置名称过滤器,用于限制用户可以选择哪些类型的文件或目录。
  21. void selectUrl(const QUrl &url): 选择指定的URL进行打开或保存。
  22. QStringList selectedFiles() const: 返回用户选择的文件列表。
  23. QString selectedMimeTypeFilter() const: 返回用户选择的MIME类型过滤器。
  24. QString selectedNameFilter() const: 返回用户选择的名称过滤器。
  25. QList<QUrl> selectedUrls() const: 返回用户选择的URL列表。
  26. void setAcceptMode(AcceptMode mode): 设置文件对话框的接受模式,如QFileDialog::AnyFile, QFileDialog::ExistingFile, QFileDialog::DirectoryOnly等。
  27. void setDefaultSuffix(const QString &suffix): 设置默认的后缀,如果用户没有输入文件名,那么会使用这个后缀。
  28. void setDirectory(const QString &directory): 设置文件对话框当前显示的目录。
  29. void setDirectory(const QDir &directory): 与上一个函数相同,设置文件对话框当前显示的目录。
  30. void setDirectoryUrl(const QUrl &directory): 设置文件对话框当前显示的目录的URL。
  31. void setFileMode(FileMode mode): 设置文件对话框的文件模式,如QFileDialog::AnyFile, QFileDialog::ExistingFile, QFileDialog::Directory, QFileDialog::DirectoryOnly等。
  32. void setFilter(QDir::Filters filters): 设置文件对话框的过滤器设置,用于限制用户可以选择哪些类型的文件。
  33. void setHistory(const QStringList &paths): 设置文件对话框的历史记录,这些记录包含了用户之前访问过的目录。
  34. void setIconProvider(QFileIconProvider *provider): 设置文件对话框的图标提供器,用于提供文件和目录的图标。
  35. void setItemDelegate(QAbstractItemDelegate *delegate): 设置文件对话框的项目代理,用于绘制和编辑文件和目录的条目。
  36. void setLabelText(DialogLabel label, const QString &text): 设置给定标签的标签文本。
  37. void setMimeTypeFilters(const QStringList &filters): 设置文件对话框的MIME类型过滤器,用于限制用户可以选择哪些类型的文件。
  38. void setNameFilter(const QString &filter): 设置文件对话框的名称过滤器,用于限制用户可以选择哪些类型的文件或目录。
  39. void setNameFilters(const QStringList &filters): 与上一个函数相同,设置文件对话框的名称过滤器。
  40. void setOption(Option option, bool on = true): 设置文件对话框的选项,可以控制对话框的行为。
  41. void setOptions(Options options): 与上一个函数相同,设置文件对话框的选项。
  42. void setProxyModel(QAbstractProxyModel *proxyModel): 设置文件对话框的代理模型,用于组织和过滤目录中的项目。
  43. void setSidebarUrls(const QList<QUrl> &urls): 设置文件对话框的侧边栏URL列表。
  44. void setSupportedSchemes(const QStringList &schemes): 设置文件对话框支持的URL方案列表。
  45. void setViewMode(ViewMode mode): 设置文件对话框的视图模式。
  46. QList<QUrl> sidebarUrls() const: 返回文件对话框的侧边栏URL列表。
  47. QStringList supportedSchemes() const: 返回文件对话框支持的URL方案列表。
  48. bool testOption(Option option) const: 测试文件对话框是否具有指定的选项。
  49. ViewMode viewMode() const: 返回文件对话框的视图模式。

使用场景

  1. 打开文件:用户可以使用QFileDialog打开一个或多个文件,以便读取文件内容或操作文件数据。
  2. 保存文件:用户可以使用QFileDialog选择保存文件的目标路径和文件名,并将数据写入该文件。
  3. 选择文件夹:QFileDialog也可以用于选择文件夹路径,而不是具体的文件。
  4. 文件过滤:可以使用QFileDialog设置文件过滤器,限制用户只能选择特定类型的文件,以便过滤掉不支持的文件类型。
  5. 历史路径:QFileDialog可以保存用户最近打开或保存的文件,以便在下次打开对话框时提供快速访问。
  6. 自定义UI:QFileDialog提供了许多可自定义的选项,可以根据需要调整对话框的外观和行为,以匹配应用程序的需求。


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月23日 0

暂无评论

推荐阅读
yQAl4kecrO8W