文章目录
QFileDialog Class
QFileDialog类提供了一个对话框,允许用户选择文件或目录。
Header | #include < QFileDialog > |
---|---|
qmake | QT += widgets |
Inherits | QDialog |
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
Constant | Value |
---|---|
QFileDialog::AcceptOpen | 0 |
QFileDialog::AcceptSave | 1 |
enum DialogLabel
Constant | Value |
---|---|
QFileDialog::LookIn | 0 |
QFileDialog::FileName | 1 |
QFileDialog::FileType | 2 |
QFileDialog::Accept | 3 |
QFileDialog::Reject | 4 |
enum FileMode
此枚举用于指示用户可以在“文件”对话框中选择什么,即,如果用户单击“确定”,对话框将返回什么。
Constant | Value | Description |
---|---|---|
QFileDialog::AnyFile | 0 | 文件名,不管它是否存在。 |
QFileDialog::ExistingFile | 1 | 单个现有文件的名称。 |
QFileDialog::Directory | 2 | 目录的名称。同时显示文件和目录。但是,本机Windows文件对话框不支持在目录选择器中显示文件。 |
QFileDialog::ExistingFiles | 3 | 零个或多个现有文件的名称。 |
QFileDialog::DirectoryOnly | 4 | 改用Directory 和 setOption(ShowDirsOnly,true)。 |
enum Option
flags Options
Constant | Value | Description |
---|---|---|
QFileDialog::ShowDirsOnly | 0x01 | 仅在文件对话框中显示目录。默认情况下,同时显示文件和目录。(仅在目录文件模式下有效。) |
QFileDialog::DontResolveSymlinks | 0x02 | 不解析文件对话框中的符号链接。默认情况下,会解析符号链接。 |
QFileDialog::DontConfirmOverwrite | 0x04 | 如果选择了现有文件,则不要求确认。默认情况下,请求确认。 |
QFileDialog::DontUseNativeDialog | 0x10 | 不要使用本机文件对话框。默认情况下,除非使用包含Q_OBJECT宏的QFileDialog子类,或者平台没有所需类型的本机对话框,否则将使用本机文件对话框。 |
注意:必须在更改对话框属性或显示对话框之前设置此选项。
Constant | Value | Description |
---|---|---|
QFileDialog::ReadOnly | 0x20 | 指示模型为只读。 |
QFileDialog::HideNameFilterDetails | 0x40 | 指示文件名筛选器详细信息是否隐藏。 |
QFileDialog::DontUseSheet | 0x08 | 在以前的Qt版本中,如果静态函数被赋予父函数,那么静态函数将默认创建一个表。这在qt4.5中不再受支持并且不起任何作用,静态函数将始终是一个应用程序模式对话框。如果要使用工作表,请改用QFileDialog::open() 。 |
QFileDialog::DontUseCustomDirectoryIcons | 0x80 | 始终使用默认目录图标。有些平台允许用户设置不同的图标。自定义图标查找会对网络或可移动驱动器的性能造成很大影响。设置此选项将启用图标提供程序中的QFileIconProvider::DontUseCustomDirectoryIcons选项。这个枚举值是在Qt5.2中添加的。 |
enum ViewMode
Constant | Value | Description |
---|---|---|
QFileDialog::Detail | 0 | 显示目录中每个项目的图标、名称和详细信息。 |
QFileDialog::List | 1 | 仅显示目录中每个项目的图标和名称。 |
属性
-
acceptMode: AcceptMode 对话框的接受模式
操作模式定义对话框是用于打开还是保存文件。
默认情况下,此属性设置为AcceptOpen。- QFileDialog::AcceptMode acceptMode() const
- void setAcceptMode(QFileDialog::AcceptMode mode)
-
defaultSuffix: QString 如果未指定其他后缀,则在文件名中添加后缀
此属性指定一个字符串,如果该字符串没有后缀,则该字符串将被添加到文件名中。后缀通常用于表示文件类型(例如,“txt”表示文本文件)。
如果第一个字符是点(‘.’),它将被删除。- QString defaultSuffix() const
- void setDefaultSuffix(const QString &suffix)
-
fileMode: FileMode 对话框的文件模式
文件模式定义用户希望在对话框中选择的项目的数量和类型。
默认情况下,此属性设置为AnyFile。
此函数将设置文件名的标签并接受DialogLabels。可以在调用setFileMode() 后设置自定义文本。- QFileDialog::FileMode fileMode() const
- void setFileMode(QFileDialog::FileMode mode)
-
options: Options 包含影响对话框外观的各种选项
默认情况下,禁用所有选项。
在更改对话框属性或显示对话框之前,应设置选项(尤其是DontUseNativeDialogs选项)。
在对话框可见时设置选项不能保证立即对对话框产生影响(取决于选项和平台)。
更改其他属性后设置选项可能会导致这些值无效。- QFileDialog::Options options() const
- void setOptions(QFileDialog::Options options)
-
supportedSchemes: QStringList 文件对话框应允许导航到的URL方案
设置此属性允许限制用户可以选择的URL类型。它是应用程序声明它将支持的协议以获取文件内容的一种方法。空列表表示不应用任何限制(默认设置)。本地文件支持(“文件”方案)是隐式的,并且始终启用;不必将其包含在限制中。- QStringList supportedSchemes() const
- void setSupportedSchemes(const QStringList &schemes)
-
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