1.FileDialog介绍

Qt Quick中的FileDialog文件对话框支持的平台有:

笔者使用的是Qt 5.8以上的版本,模块是import Qt.labs.platform 1.1.

它的属性如下所示:

  • acceptLabel : string,标签,设置对话框中的接收按钮的文本内容,默认标签通常为打开或保存
  • rejectLabel : string,标签,设置对话框中的拒绝按钮的文本内容
  • currentFile : url,此属性保存对话框中当前选定的文件路径,假如我们是保存文件,并且想给要保存的文件命名,比如123.txt,则赋值"file:///123.txt"
  • currentFiles : list<url>,此属性保存对话框中当前多选下选定的文件
  • defaultSuffix : string,默认后缀,如果选定的文件后缀名没有,那么将defaultSuffix添加到指定到选定的文件名末尾
  • file : url,此属性保存用户最终选中的文件,和currentFile不同,只有当用户点击"确定"键后,才会赋值.
  • files : list<url>,此属性保存用户最终选中的多个文件.和currentFiles不同,只有当用户点击"确定"键后,才会赋值.
  • fileMode : enumeration,对话框属性,取值如下所示:
    • FileDialog.OpenFile: 打开文件(默认)
    • FileDialog.OpenFiles: 打开多个文件
    • FileDialog.SaveFile: 保存文件
  • folder : url,此属性保存文件对话框默认打开时的文件夹路径.如果要使用文件夹对话框,请改用FolderDialog元素
  • nameFilters : list<string>: 文件名筛选器.比如:nameFilters: ["Text files (*.txt)", "HTML files (*.html *.htm)"]
  • options : flags,对话框选项,默认都是禁止的,取值如下所示:
    • FileDialog.DontResolveSymlinks : 不要在文件夹对话框中解决符号链接
    • FileDialog.DontConfirmOverwrite : 在保存文件状态下,如果文件已存在,则不提示用户,直接覆盖,默认是要提示的.
    • FileDialog.ReadOnly : 设置对话框不允许创建目录。
    • FileDialog.HideNameFilterDetails : 是否隐藏文件名筛选器详细信息
  • selectedNameFilter.index : int,保存用户选择的哪个筛选器索引号
  • selectedNameFilter.name : string,保存用户选择的哪个筛选器名称
  • selectedNameFilter.extensions : list<string> ,保存用户选择的哪个筛选器扩展列表,比如"HTML files (*.html *.htm)",那么extensions = ["html","htm"]
  • title : string, 对话框标题
  • result : int,对话框结果,取值有:
  • Dialog.Accepted : 用户选择了接收按钮
  • Dialog.Rejected : 用户选择了拒绝按钮

Signals:

  • void accepted() : 当用户选择了接收按钮,则发出该信号,假如调用了close()则不会发出
  • void rejected() : 当用户选择了拒绝按钮,则发出该信号,假如调用了close()则不会发出

Methods:

  • void accept() : 关闭对话框,并发射accepted()信号
  • void close() : 关闭对话框,不会发射信号
  • void done(result) : 关闭对话框,并设置result属性值.
  • void open() : 打开对话
  • void reject() : 关闭对话框,并发射rejected()信号

示例如下所示:

Window {
visible: true;
width: 560
height: 440 FileDialog {
id: fileDialog
title: "打开图片或者txt文件"
nameFilters: ["Text files (*.txt)", "HTML files (*.png *.jpg)"]
acceptLabel: "确定"
rejectLabel: "取消"
fileMode: FileDialog.OpenFile
onAccepted: {
console.log("选中的文件有:")
for (var i in files) {
console.log(files[i])
}
}
} Button {
text: "打开单个文件"
onPressed: fileDialog.open();
}

2.FolderDialog
FolderDialog的属性非常少,毕竟只是文件夹对话框.
它的options属性如果设置为FolderDialog.ShowDirsOnly,那么将会只显示文件夹.
当我们对话框在某个文件夹下面时,点击确定,则会将当前文件夹路径保存在currentFolder属性中.

接下来我们便来个综合示例.

3.FileDialog和FolderDialog综合示例

界面效果图如下所示:

当我们打开多个文件、保存文件、选择文件夹时,则将目录路径以及选中的文件路径都打印在TextArea中,下次再次点击对话框时,则以之前打开的目录路径为默认路径.

该示例使用了两个自定义控件:

  • DynamicGroupBox (控件代码路径:https://www.cnblogs.com/lifexy/p/14751099.html)
  • DynamicBtn   (控件代码路径:https://www.cnblogs.com/lifexy/p/14671855.html)

整个代码如下所示:

import QtQuick 2.14
import QtQuick.Window 2.0
import QtQuick.Controls 2.4
import QtQuick.Layouts 1.14
import Qt.labs.platform 1.1
Window {
visible: true;
width: 560
height: 440 property string defaltFolderUrl: "file:///C:/" // 对话框目录路径 FileDialog {
id: fileDialog
acceptLabel: "确定"
rejectLabel: "取消"
nameFilters: ["All (*)", "Text files (*.txt)", "HTML files (*.png *.jpg)"]
folder: defaltFolderUrl
onAccepted: {
textArea.text = "当前路径:\n "+defaltFolderUrl + "\n\n" + title + ":\n"
for (var i in files) {
textArea.text += " " + files[i] + "\n"
}
}
onFolderChanged: {
defaltFolderUrl = folder;
}
} FolderDialog {
id: folderDlialog
acceptLabel: "确定"
rejectLabel: "取消"
folder: defaltFolderUrl
options: FolderDialog.ShowDirsOnly
onAccepted: {
textArea.text = "当前路径:\n "+defaltFolderUrl + "\n\n" + title + ":\n "
textArea.text += currentFolder
defaltFolderUrl = currentFolder
}
onFolderChanged: {
defaltFolderUrl = folder;
}
} RowLayout {
anchors.fill: parent
anchors.margins: 20
spacing: 10 ScrollView {
id: view
Layout.fillWidth: true
Layout.fillHeight: true
Layout.columnSpan: 3
Layout.preferredWidth: 240
Layout.preferredHeight: 300
clip: true
ScrollBar.vertical.policy: textArea.contentHeight > Layout.preferredHeight ?
ScrollBar.AlwaysOn : ScrollBar.AlwaysOff; // 如果文本内容高度大于显示高度,则一直显示垂直滑动条 TextArea {
id: textArea
padding: 4
implicitWidth: 240
wrapMode: TextArea.WrapAnywhere
text: "当前路径:\n "+defaltFolderUrl
font.pixelSize: 14
background: Rectangle {
width: parent.width
height: parent.height
border.color: "#B0B0B0"
radius: 3
} }
} DynamicGroupBox {
title: "请选择对话框"
Layout.fillHeight: true
Layout.fillWidth: false
Layout.preferredWidth: 130 // 在GridLayout中要想固定指定高度,必须使用preferredWidth,然后将fillWidth置为false
Layout.preferredHeight: 300
titleFontPixel: 15
Column {
anchors.fill: parent
spacing: 12
DynamicBtn {
text: "打开单个文件"
backColor: "#5CA1F6"
fontPixelSize: 13
onPressed: {
fileDialog.title = text
fileDialog.fileMode = FileDialog.OpenFile
fileDialog.open()
}
}
DynamicBtn {
text: "打开多个文件"
backColor: "#56CDB7"
fontPixelSize: 13
onPressed: {
fileDialog.title = text
fileDialog.fileMode = FileDialog.OpenFiles
fileDialog.open()
} }
DynamicBtn {
text: "保存文件"
backColor: "#4F64BA"
fontPixelSize: 13
onPressed: {
fileDialog.title = text
fileDialog.fileMode = FileDialog.SaveFile
fileDialog.currentFile = "file:///123.txt"
fileDialog.open()
} }
DynamicBtn {
text: "选择文件夹"
backColor: "#F08140"
fontPixelSize: 13
onPressed: {
folderDlialog.title = text
folderDlialog.open()
} }
}
}
} }

21.Quick QML-FileDialog、FolderDialog对话框的更多相关文章

  1. Qt Quick QMl学习笔记 之图片浏览器

    Qt Quick模块是编写QML应用程序的标准库.虽然Qt QML模块提供QML引擎和语言基础结构,但Qt Quick模块提供了使用QML创建用户界面所需的所有基本类型.它提供了一个可视画布,包括用于 ...

  2. Qt5官方demo解析集21——Extending QML - Adding Types Example

    本系列全部文章能够在这里查看http://blog.csdn.net/cloud_castle/article/category/2123873 又是一个新的系列了,只是这个系列和我们之前的Chapt ...

  3. Qt Quick Controls 与 Qt Quick Controls 2的区别(详细对照)

    Qt Quick Controls 原本是为支持桌面平台而开发的,后来又加入了移动平台和嵌入式平台的支持.它们应用非常广泛,因为它们提供了足够灵活的样式系统,以允许开发具有平台相关或者无关风格的应用程 ...

  4. Qt Quick 基本元素初体验

    Qt Quick 作为 QML 语言的标准库,提供了很多基本元素和控件来帮助我们构建 Qt Quick 应用,这节我们简要地介绍一些 Qt Quick 元素. 一. 基本可视化项 1.1 Item I ...

  5. 漫谈QML

    漫谈 QML/Qt Quick QML是从Qt 4.7开始引入的,QML是一种声明语言,使得可以像设计师思考的一样编码,并且Qt Quick元素就是应用程序的编译单元,每一帧的故事板被声明为元素树中的 ...

  6. Python零基础入门之Tkinter的对话框

    这篇博客主要是总结一下Tkinter中的对话框的使用,值得一提的是自从python3.0之后关于关于对话框的模块(messagebox.filedialog.colorchooser)都被收归到了tk ...

  7. python tkinter-消息框、对话框、文件对话框

    python tkinter-消息框.对话框.文件对话框   消息框 导入 import tkinter import tkinter.messagebox #这个是消息框,对话框的关键 提示消息框 ...

  8. (3)python tkinter-消息框、对话框、文件对话框

    消息框 导入 import tkinter import tkinter.messagebox #这个是消息框,对话框的关键 提示消息框 tkinter.messagebox.showinfo('提示 ...

  9. Qt Quick之StackView具体解释(1)

    Qt Quick中有个StackView.我在<Qt Quick核心编程>一书中没有讲到.近期有人问起,趁机学习了一下,把它的基本使用方法记录下来. 我准备分两次来讲.第一次讲主要的使用方 ...

随机推荐

  1. gstreamer应用开发(播放器)之旅

    GStreamer开发,主要分为两块:应用开发.插件开发. 插件开发人员,通常是编解码库的作者(做出了编解码库后,希望gstreamer能用起来这个库,因此增加这个适配层).芯片原厂人员(将自家的hw ...

  2. .net core 和 WPF 开发升讯威在线客服系统【私有化部署免费版】发布

    希望 .net 和 WPF 技术时至今日,还能有一些存在感. 这个项目源于2015年前后,当时开发的初版,我使用了 ASP.NET MVC 做为后端,数据库使用原生 ADO.NET 进行操作.WPF ...

  3. Java例题_48 四位数据加密

    1 /*48 [程序 48 加密] 2 题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的, 3 加密 规则如下: 4 每位数字都加上 5,然后用和除以 10 的余数代替该数字 ...

  4. 【面试技巧】老生常谈之 n 种使用 CSS 实现三角形的技巧

    在一些面经中,经常能看到有关 CSS 的题目都会有一道如何使用 CSS 绘制三角形,而常见的回答通常也只有使用 border 进行绘制一种方法. 而 CSS 发展到今天,其实有很多有意思的仅仅使用 C ...

  5. BUAA_OO_2020_第三单元总结

    BUAA_OO_2020_第三单元总结 JML理论基础 简介 JML(Java Modeling Language)是一种用于对JAVA程序进行规格化设计的语言,其通过定义接口所包含方法的行为,来约束 ...

  6. 1.设置和验证MySQL数据库的隔离级别

    登录数据库 mysql -u root - p 新建用户,各启动一个事物,用于同时操作数据库表中数据 create user tom identified by 'tom'; 然后同时再用该用户启动M ...

  7. 【cypress】4. 丰富的调试工具

    Cypress附带了一系列调试工具来帮助我们弄明白测试的经过,利于我们更好的调试. 具体这些工具的能力都有啥? 回到每个命令的快照. 可以看到特殊的已发生的page events. 接收关于每个命令的 ...

  8. 总结:composer的install和require和update指令。到底什么时候用什么指令

    https://packagist.org  相当于是应用商店

  9. 【Https】Https为什么能保证安全?

    HTTPS是在HTTP上建立SSL加密层,并对传输数据进行加密,是HTTP协议的安全版. 反观HTTPS协议,它比HTTP协议相比多了以下优势(下文会详细介绍): 数据隐私性:内容经过对称加密,每个连 ...

  10. PHP正则匹配各种匹配方法

    平时做网站经常要用正则表达式,下面是一些讲解和例子,仅供大家参考和修改使用: 匹配数字 "^\d+$" //非负整数(正整数 + 0) "[1][1-9][0-9]$&q ...