对话框(05):【类】QFileDialog [官翻]

QFileDialog Class

QFileDialog类提供了一个对话框,允许用户选择文件目录

Header#include < QFileDialog >
qmakeQT += widgets
InheritsQDialog
Inherited By

详细说明

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)”中给定的模式匹配的文件。文件对话框的父级设置为“打开图像”,窗口标题设置为“ Open Image ”。

如果要使用多个筛选器,请用两个分号分隔每个筛选器。例如:

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

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

 dialog.setViewMode(QFileDialog::Detail);

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

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

在上面的示例中,创建并显示了一个模式文件对话框。如果用户单击“确定”,则他们选择的文件将放在文件名中。
可以使用setDirectory() 设置对话框的工作目录。可以使用selectFile() 函数选择当前目录中的每个文件。
标准对话框示例演示如何使用QFileDialog以及其他内置Qt对话框。

默认情况下,如果平台有本机文件对话框,则将使用该对话框。在这种情况下,将不会实例化用于构建对话框的小部件,因此layout() 和itemdegate() 等相关访问器将返回null。您可以设置DontUseNativeDialog选项,以确保使用基于小部件的实现而不是本机对话框。

公共类型

enum AcceptMode

ConstantValue
QFileDialog::AcceptOpen0
QFileDialog::AcceptSave1

enum DialogLabel

ConstantValue
QFileDialog::LookIn0
QFileDialog::FileName1
QFileDialog::FileType2
QFileDialog::Accept3
QFileDialog::Reject4

enum FileMode

此枚举用于指示用户可以在“文件”对话框中选择什么,即,如果用户单击“确定”,对话框将返回什么。

ConstantValueDescription
QFileDialog::AnyFile0文件名,不管它是否存在。
QFileDialog::ExistingFile1单个现有文件的名称。
QFileDialog::Directory2目录的名称。同时显示文件和目录。但是,本机Windows文件对话框不支持在目录选择器中显示文件。
QFileDialog::ExistingFiles3零个或多个现有文件的名称。
QFileDialog::DirectoryOnly4改用Directory 和 setOption(ShowDirsOnly,true)。

enum Option

flags Options

ConstantValueDescription
QFileDialog::ShowDirsOnly0x01仅在文件对话框中显示目录。默认情况下,同时显示文件和目录。(仅在目录文件模式下有效。)
QFileDialog::DontResolveSymlinks0x02不解析文件对话框中的符号链接。默认情况下,会解析符号链接。
QFileDialog::DontConfirmOverwrite0x04如果选择了现有文件,则不要求确认。默认情况下,请求确认。
QFileDialog::DontUseNativeDialog0x10不要使用本机文件对话框。默认情况下,除非使用包含Q_OBJECT宏的QFileDialog子类,或者平台没有所需类型的本机对话框,否则将使用本机文件对话框。

注意:必须在更改对话框属性或显示对话框之前设置此选项。

ConstantValueDescription
QFileDialog::ReadOnly0x20指示模型为只读。
QFileDialog::HideNameFilterDetails0x40指示文件名筛选器详细信息是否隐藏。
QFileDialog::DontUseSheet0x08在以前的Qt版本中,如果静态函数被赋予父函数,那么静态函数将默认创建一个表。这在qt4.5中不再受支持并且不起任何作用,静态函数将始终是一个应用程序模式对话框。如果要使用工作表,请改用QFileDialog::open() 。
QFileDialog::DontUseCustomDirectoryIcons0x80始终使用默认目录图标。有些平台允许用户设置不同的图标。自定义图标查找会对网络或可移动驱动器的性能造成很大影响。设置此选项将启用图标提供程序中的QFileIconProvider::DontUseCustomDirectoryIcons选项。这个枚举值是在Qt5.2中添加的。

enum ViewMode

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

属性

  1. acceptMode: AcceptMode 对话框的接受模式
    操作模式定义对话框是用于打开还是保存文件。
    默认情况下,此属性设置为AcceptOpen。

    • QFileDialog::AcceptMode acceptMode() const
    • void setAcceptMode(QFileDialog::AcceptMode mode)

  2. defaultSuffix: QString 如果未指定其他后缀,则在文件名中添加后缀
    此属性指定一个字符串,如果该字符串没有后缀,则该字符串将被添加到文件名中。后缀通常用于表示文件类型(例如,“txt”表示文本文件)。
    如果第一个字符是点(‘.’),它将被删除。

    • QString defaultSuffix() const
    • void setDefaultSuffix(const QString &suffix)
  3. fileMode: FileMode 对话框的文件模式
    文件模式定义用户希望在对话框中选择的项目的数量和类型。
    默认情况下,此属性设置为AnyFile。
    此函数将设置文件名的标签并接受DialogLabels。可以在调用setFileMode() 后设置自定义文本。

    • QFileDialog::FileMode fileMode() const
    • void setFileMode(QFileDialog::FileMode mode)
  4. options: Options 包含影响对话框外观的各种选项

    默认情况下,禁用所有选项。
    在更改对话框属性或显示对话框之前,应设置选项(尤其是DontUseNativeDialogs选项)。
    在对话框可见时设置选项不能保证立即对对话框产生影响(取决于选项和平台)。
    更改其他属性后设置选项可能会导致这些值无效。

    • QFileDialog::Options options() const
    • void setOptions(QFileDialog::Options options)
  5. supportedSchemes: QStringList 文件对话框应允许导航到的URL方案
    设置此属性允许限制用户可以选择的URL类型。它是应用程序声明它将支持的协议以获取文件内容的一种方法。空列表表示不应用任何限制(默认设置)。本地文件支持(“文件”方案)是隐式的,并且始终启用;不必将其包含在限制中。

    • QStringList supportedSchemes() const
    • void setSupportedSchemes(const QStringList &schemes)
  6. viewMode: ViewMode 文件和目录在对话框中的显示方式

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

    • QFileDialog::ViewMode viewMode() const
    • void setViewMode(QFileDialog::ViewMode mode)

公共函数

构造和析构

  • QFileDialog(QWidget *parent = nullptr, const QString &caption = QString(), const QString &directory = QString(), const QString &filter = QString())
  • QFileDialog(QWidget *parent, Qt::WindowFlags flags)
  • virtual ~QFileDialog()

属性相关

  • QFileDialog::AcceptMode acceptMode() const
    void setAcceptMode(QFileDialog::AcceptMode mode)
  • QString defaultSuffix() const
    void setDefaultSuffix(const QString &suffix)
  • QFileDialog::FileMode fileMode() const
    void setFileMode(QFileDialog::FileMode mode)
  • QFileDialog::Options options() const
    void setOptions(QFileDialog::Options options)
  • QStringList supportedSchemes() const
    void setSupportedSchemes(const QStringList &schemes)
  • QFileDialog::ViewMode viewMode() const
    void setViewMode(QFileDialog::ViewMode mode)

其它

  • void open(QObject *receiver, const char *member) 此函数将其信号之一连接到接收器和成员指定的插槽

    如果fileMode是ExistingFiles,则具体的信号取决于fileSelected() ,如果fileMode是其他类型,则取决于fileSelected() 。 当对话框关闭时,信号将从插槽断开。

状态的保存和恢复

  • bool restoreState(const QByteArray &state)
  • QByteArray saveState() const

选项

  • bool testOption(QFileDialog::Option option) const
  • void setOption(QFileDialog::Option option, bool on = true)

目录和文件

  • QDir directory() const
    void setDirectory(const QString &directory)
    void setDirectory(const QDir &directory)
  • void selectFile(const QString &filename)
    QStringList selectedFiles() const

URL

  • QUrl directoryUrl() const
    void setDirectoryUrl(const QUrl &directory)
  • void selectUrl(const QUrl &url)
    QList< QUrl> selectedUrls() const
  • QList< QUrl> sidebarUrls() const
    void setSidebarUrls(const QList< QUrl > &urls)

过滤器

  • QDir::Filters filter() const
    void setFilter(QDir::Filters filters)
  • QStringList mimeTypeFilters() const
    QString selectedMimeTypeFilter() const
    void setMimeTypeFilters(const QStringList &filters)
    void selectMimeTypeFilter(const QString &filter)
  • QString selectedNameFilter() const
    void setNameFilter(const QString &filter)
  • QStringList nameFilters() const
    void setNameFilters(const QStringList &filters)
  • void selectNameFilter(const QString &filter)

历史记录

  • QStringList history() const
    void setHistory(const QStringList &paths)

IconProvider

  • QFileIconProvider * iconProvider() const
    void setIconProvider(QFileIconProvider *provider)

代理和委托

  • QAbstractItemDelegate * itemDelegate() const
    void setItemDelegate(QAbstractItemDelegate *delegate)
  • QAbstractProxyModel * proxyModel() const
    void setProxyModel(QAbstractProxyModel *proxyModel)

标签文本

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

重写的公共函数

  • 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)

    void saveFileContent(const QByteArray &fileContent, const QString &fileNameHint = QString())

文件名

  • 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())

    QString getSaveFileName(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options())

文件URL

  • 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())

    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())

重写的受保护的函数

  • virtual void accept() override
  • virtual void changeEvent(QEvent *e) override
  • virtual void done(int result) override
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值