当前位置:网站首页>Roson的Qt之旅#100 QML四种标准对话框(颜色、字体、文件、提升)
Roson的Qt之旅#100 QML四种标准对话框(颜色、字体、文件、提升)
2022-07-25 16:35:00 【Allen Roson】
一个完整的应用程序通常需要使用对话框来完成一些交互。有些对话框提供一些通用功能,比如选择文件、选择颜色等。由于这部分对话框对于每个程序都是一样的,QML提供了一系列预定义的对话框,被称为标准对话框。在QML中,使用标准对话框需要导入 Dialogs模块:
import QtQuick. Dialogs 1.1该模块提供了4种标准对话框:ColorDialog、FileDialog、FontDialog 和 MessageDialog。下面逐个介绍。
颜色对话框
ColorDialog对应着Widgets中的QColorDialog,用于进行颜色选择的对话框。初始状态下,该对话框是不可见的,需要先对其属性进行设置,然后将其visible属性设置为true,或者调用open()函数。
ColorDialog自动作为其父窗口的对话框,因此一般会显示在父窗口的中心。只要平台支持,ColorDialog就会使用平台自身的颜色对话框;否则, ColorDialog 会初始化一个 QColorDialog进行显示。如果连 QColorDialog 都不能初始化,ColorDialog则会显示一个QML 的实现 DefaultColorDialog. qml。在这种情况下,通过编辑DefaultCol-orDialog.qml 即可自定义ColorDialog 的外观。DefaultColorDialog.qml包含了一个用于存放对话框内容的Rectangle组件,这是为了避免某些嵌入式系统不支持多个顶层窗口。当对话框可见时,如果可能, DefaultColorDialog.qml 会被嵌入到一个Win-dow中;如果底层平台只支持一个顶层窗口,在这种情形下,由于主窗口已经是一个顶层窗口,所以颜色对话框不能再成为另外一个顶层窗口,因此,QML选择将其放在主窗口中重新渲染。
import QtQuick 2.9
import QtQuick.Window 2.2
import QtQuick.Controls 2.2
import QtQuick.Dialogs 1.2
Window {
id:window
visible: true
width: 200
height: 200
title: qsTr("Hello World")
Button{
text: qsTr("Open Color Dialog")
onClicked:colorDialog.open()
}
ColorDialog{
id:colorDialog
title:qsTr("select color")
onAccepted: window.color = color //点击ok按钮后执行
onRejected: console.log("cilcked cancel") //点击cancle按钮后执行
}
}

字体选择对话框
FontDialog对应着Widgets中的QFontDialog,用于进行字体选择的对话框,和前面的对话框类型有相似的特性。FontDialog类型中可以在使用open()以前,使用font属性来设置初始的字体,当关闭对话框以后,可以使用 font来获取选择的字体类型。
import QtQuick 2.9
import QtQuick.Window 2.2
import QtQuick.Controls 2.2
import QtQuick.Dialogs 1.2
Window {
id:window
visible: true
width: 200
height: 200
title: qsTr("Hello World")
Button{
text: qsTr("Open Font Dialog")
onClicked:fontDialog.open()
}
FontDialog{
id:fontDialog
title:qsTr("select font")
font:Qt.font({family:"Arial",pointSize:24,weight:Font.Normal})
onAccepted: console.log("selected font is" + fontDialog.font) //点击ok按钮后执行
onRejected: console.log("cilcked cancel") //点击cancle按钮后执行
}
}

文件选择对话框
FileDialog对应着Widgets中的QFileDialog,用于显示选择文件的对话框。同ColorDialog类似,初始状态下, FileDialog 也是不可见的。使用之前先设置一些相关属性,然后将其visible属性设置为true,或者调用open函数。FileDialog其他特性同样类似ColorDialog,这里不再赘述。
选择的文件或文件列表(选择了多个文件时)的路径可以通过fileUrl或fileUrls来获取,如果要选择多个文件,需要设置selectMultiple属性为true。如果要选择目录而不是文件,可以设置selectFolder为true,然后通过folder属性来获取选择的目录路径。如果在调用open()以前设置了folder属性,那么会打开指定的目录。还可以使用nameFilters来设置文件名过滤器,过滤器中可以使用?和*通配符,每个字符串之间使用空格隔开。

提示消息框
MessageDialog对应着C++中的QMessageBox,用于显示一些提示信息的标准对话框,比如警告、错误等。与QMessageBox提供了很多方便的静态函数不同,这里需要一个个设置MessageDialog的各个属性,以便达到需要的效果。
使用text属性可以设置主要显示的内容,使用detailedText属性可以设置要显示的详细信息。icon属性用来设置对话框的图标,一共有5种:StandardIcon.NoIcon(没有图标)、StandardIcon.Question(问题)、StandardIcon.Information(信息)、StandardIcon.Warning(警告)、StandardIcon. Critical(错误)。使用standardButtons属性可以设置对话框中的按钮。每一个按钮都包含一个ButtonRole,用来决定按钮被按下时发射的信号类型,例如Ok按钮对应的是AcceptRole,那么Ok按钮按下时就应该在onAccepted()信号处理器中进行相应操作;而Help按钮对应的是HelpRole,那么其对应的就是onHelp()信号处理器。
MessageDialog中的标准按钮类型
| 按钮名称 | 描述 |
| StandardButton.Ok | 使用AcceptRole定义的OK按钮 |
| StandardButton.Open | 使用AcceptRole定义的Open按钮 |
| StandardButton.Save | 使用AcceptRole定义的Save按钮 |
| StandardButton.Cancel | 使用RejectRole定义的Cancel按钮 |
| StandardButton.Close | 使用RejectRole定义的 Close按钮 |
| StandardButton.Discard | 使用DestructiveRole定义的Discard或Don't Save按钮 |
| StandardButton.Apply | 使用ApplyRole定义的 Apply按钮 |
| StandardButton.Reset | 使用ResetRole定义的Reset按钮 |
| StandardButton.RestoreDefaults | 使用ResetRole定义的Restore Defaults按钮 |
| StandardButton.Help | 使用HelpRole定义的Help按钮 |
| StandardButton.SaveAll | 使用AcceptRole定义的SaveAll按钮 |
| StandardButton.Yes | 使用YesRole定义的Yes按钮 |
| StandardButton.YesToAll | 使用YesRole定义的Yes to All按钮 |
| StandardButton.No | 使用NoRole定义的No按钮 |
| StandardButton. NoToAll | 使用NoRole定义的No to All按钮 |
| StandardButton.Abort | 使用RejectRole定义的 Abort按钮 |
| StandardButton.Retry | 使用AcceptRole定义的 Retry按钮 |
| StandardButton.Ignore | 使用AcceptRole定义的Ignore按钮 |

边栏推荐
猜你喜欢

Use huggingface to quickly load pre training models and datasets in moment pool cloud

Crazy God redis notes 12

How to build an enterprise level OLAP data engine for massive data and high real-time requirements?

微信公众号开发之消息的自动回复

Fudan University EMBA peer topic: always put the value of consumers in the most important position

一文理解分布式开发中的服务治理
![Leetcode:154. find the minimum value II in the rotation sort array [about the middle and rear positioning dichotomy of the rotation sort array]](/img/03/54a2d82a17cd07374dc0aedacd7b11.png)
Leetcode:154. find the minimum value II in the rotation sort array [about the middle and rear positioning dichotomy of the rotation sort array]

用递归进行数组求和

中国芯片自给率大幅提升,导致外国芯片库存高企而损失惨重,美国芯片可谓捧起石头砸自己的脚...

3D semantic segmentation - PVD
随机推荐
MySQL table read lock
一文理解分布式开发中的服务治理
Permission management - role assignment menu
Two methods of importing sqllite table from MySQL
伦敦银K线图的各种有用形态
C# 音乐
微信小程序不使用插件,渲染富文本中的视频,图片自适应,plus版本
Differences between cookies, cookies and sessions
01.一个更简单的方法来传递大量的props
吴恩达逻辑回归2
152. Product maximum subarray
Baidu rich text editor ueeditor single image upload cross domain
High score technical document sharing of ink Sky Wheel - Database Security (48 in total)
什么是链游系统开发?链游系统开发如何制作
柏睿数据加入阿里云PolarDB开源数据库社区
3D 语义分割——Scribble-Supervised LiDAR Semantic Segmentation
How does win11's own drawing software display the ruler?
152. 乘积最大子数组
【读书会第13期】+FFmpeg开源项目
Register service instances in ngmodule through dependency injection