FileDialog文件对话框使用总结
- 一、概述
- 二、使用
- 三、常用属性
- 四、常用例子
- 1. 单选打开文本文件
- 2. 单选保存文本文件
一、概述
FileDialog提供了一个基本的文件选择器的功能:它允许用户选择现有的文件或目录,或者创建新的文件名。
对话框最初是不可见的。你需要首先按需设置属性,然后将visible设置为true或调用open()。
对于其父窗口,文件对话框窗口是自动临时的。因此,无论您在项目中还是在窗口中声明对话框,对话框都将显示在包含项目的窗口或您声明的窗口的中央。
FileDialog的实现将是一个平台文件对话框。如果失败了,那么它将尝试实例化一个QFileDialog。如果这也失败了,那么它将退回到QML实现,defaultfildialog . QML。在这种情况下,您可以通过编辑此文件来定制外观。
DefaultFileDialog.qml包含一个矩形来保存对话框的内容,因为某些嵌入式系统不支持多个顶级窗口。当对话框变得可见时,如果可能的话,它将自动包装在一个窗口中,如果只能有一个窗口,则简单地在主窗口的顶部重新添加父元素。
QML实现有一个侧边栏,其中包含通用平台特定位置的快捷方式,以及用户可修改的收藏夹。它使用特定于应用程序的设置来存储用户的收藏夹,以及其他用户可修改的状态,例如是否显示侧边栏、分割器的位置和对话框大小。这些设置存储在应用程序特定的QSettings的一个称为QQControlsFileDialog的部分中。
例如,当使用qml工具测试应用程序时,将在qml运行时设置文件(或注册表项)中创建QQControlsFileDialog部分。如果应用程序是通过自定义c++ main()函数启动的,建议设置名称、组织和域,以便控制应用程序设置的位置。 有时候不设置就会出问题,如果在应用程序的其他部分使用设置对象,它们将存储在同一文件的其他部分。
//如果调用时有问题,就在c++里写下面的东西
setOrganizationName("自己的组织");
setOrganizationDomain("自己的域名");
QFileDialog全局存储其设置,而不是按应用程序存储。平台原生文件对话框可以也可以不以各种平台相关的方式存储设置。
二、使用
下面是一个打开文件对话框并在用户选择文件后退出的最小示例:
import QtQuick 2.2
import QtQuick.Dialogs 1.0
FileDialog {
id: fileDialog
title: "Please choose a file"
folder: shortcuts.home
onAccepted: {
console.log("You chose: " + fileDialog.fileUrls)
Qt.quit()
}
onRejected: {
console.log("Canceled")
Qt.quit()
}
Component.onCompleted: visible = true
}
注意返回的是一个字符串 url 在c++里面使用这个字符串的话,要把这个url转换为 QUrl -> QString
//设 qmlStr 是从qml到c++里面的路径url字符串
QUrl url(qmlStr );
QString localFilePath = url.toLocalFile();
QFile(localFilePath );
//下面就是处理文件之类的
三、常用属性
fileUrl : url
fileUrls : list
- 都是保存文件的路径之类的。
defaultSuffix : string
- 如果没有指定其他后缀,则此属性保存添加到文件名的后缀。
此属性指定一个字符串,如果该字符串没有后缀,则将添加到文件名中。后缀通常用于表示文件类型(例如:其中txt为文本文件)。
如果第一个字符是点号(‘.’),则删除它。
nameFilters : list
- 用作文件名过滤器的字符串列表。每个字符串可以是一个以空格分隔的过滤器列表;过滤器可能包括?和*通配符。过滤器列表也可以用括号括起来,并提供过滤器的文本描述。就像下面的这种。
FileDialog {
nameFilters: [ "Image files (*.jpg *.png)", "All files (*)" ]
}
shortcuts : Object
- 从QStandardPaths到它们的url的一些有用路径的映射。在创建文件对话框时,将每个路径添加到该列表之前,都要验证它们是否存在于用户的计算机上。例如,shortcuts.home 将提供用户主目录的URL。
属性名 | Qt对应的值 | 作用 |
---|---|---|
desktop | QStandardPaths::DesktopLocation | 用户的桌面路径. |
documents | QStandardPaths::DocumentsLocation | 用户的文档路径 |
home | QStandardPaths::HomeLocation | 用户家目录. |
music | QStandardPaths::MusicLocation | 用户音乐目录 |
movies | QStandardPaths::MoviesLocation | 用户多媒体目录 |
pictures | QStandardPaths::PicturesLocation | 用户的照片目录 |
四、常用例子
1. 单选打开文本文件
FileDialog {
id: fileDialog
folder: shortcuts.desktop
nameFilters: [ "文本文件 (*.txt *.mcp)", "All files (*)" ]
title: "请选择一个文件"
onAccepted: {
backend.filePath = fileUrl
}
onRejected: {
fileDialog.close();
}
}
2. 单选保存文本文件
这里就是要设置一下 selectExisting: false 因为是要保存文件
FileDialog {
id: saveDialog
title: "另存文件"
folder: shortcuts.desktop
nameFilters: [ "文本文件 (*.txt * .mcp)", "All files (*)" ]
selectExisting: false
onAccepted: {
console.log(saveDialog.fileUrl)
}
onRejected: {
}
}