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. java 动态规划解决最大连续子数列和

    很多动态规划算法非常像数学中的递推.我们如果能找到一个合适的递推公式,就能很容易的解决问题.我们用dp[n]表示以第n个数结尾的最大连续子序列的和,这里第n个数必须在子序列中.于是存在以下递推公式: ...

  2. flutter兼论

    Flutter是Google开发的一套全新的跨平台.开源UI框架,支持iOS.Android系统开发,并且是未来新操作系统Fuchsia的默认开发套件.自从2017年5月发布 第一个版本以来,目前Fl ...

  3. linux搭建gtk的开发环境

    1:在终端中运行以下命令: sudo apt-get install libgtk2.0-dev 2:用以下指令查看是否安装成功: pkg-config --cflags --libs gtk+-2. ...

  4. MyBatis简单的CRUD操作

    Dao接口 package com.ttpfx.dao; import com.ttpfx.domain.User; import java.util.List; public interface U ...

  5. Java中遍历集合的常用方法

    一.List 1.普通for循环 for (int i = 0; i < list.size(); i++)){ String temp = (String)list.get(i); Syste ...

  6. 微信小程序 | flex布局属性

    flex-direction 主轴方向 row: 横向 row-reverse: 横向倒序 column: 纵向 column-reverse: 纵向倒序; flex-wrap 元素排列换行 nowr ...

  7. java例题_03 水仙花数

    1 /*3 [程序 3 水仙花数] 2 题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身. 3 例如:153 是一个 ...

  8. PAT (Advanced Level) Practice 1011 World Cup Betting (20 分) 凌宸1642

    PAT (Advanced Level) Practice 1011 World Cup Betting (20 分) 凌宸1642 题目描述: With the 2010 FIFA World Cu ...

  9. 一文彻底掌握Apache Hudi的主键和分区配置

    1. 介绍 Hudi中的每个记录都由HoodieKey唯一标识,HoodieKey由记录键和记录所属的分区路径组成.基于此设计Hudi可以将更新和删除快速应用于指定记录.Hudi使用分区路径字段对数据 ...

  10. 如何用 Electron + WebRTC 开发一个跨平台的视频会议应用

    在搭建在线教育.医疗.视频会议等场景时,很多中小型公司常常面临 PC 客户端和 Web 端二选一的抉择.Electron 技术的出现解决了这一难题,只需前端开发就能完成一个跨平台的 PC 端应用.本文 ...