网站首页 > 编程文章 正文
在Qt Quick的全部控件中,有一些是基本控件,如命令按钮、文本框、标签、单选按钮、组合框和复选框等。它们通常用于显示程序界面、接受用户的输入和选择,是最常用的控件。
本文实例用基本控件制作“学生信息表单”,输入(选择)学生各项信息后单击“提交”按钮,在文本区显示出该学生的信息,运行效果如下图所示。
实现步骤如下。
(1)新建项目
创建QML项目,选择项目“Qt Quick Application - Empty”模板。项目名称为“StudentForm”。
(2)主程序
打开项目主程序文件“main.qml”,编写代码如下:
import QtQuick 2.12
import QtQuick.Controls 2.5 //导入 Qt Quick Controls 库
import QtQuick.Layouts 1.3
ApplicationWindow { //主应用窗口
width: 640
height: 480
visible: true
title: qsTr("学生信息表单")
Item { //QML通用的根元素
anchors.fill: parent
RowLayout {
x: 20; y: 20
spacing: 10
ColumnLayout { //列布局
spacing: 8
RowLayout { //行布局
spacing: 0
Label { text: "姓名" } /*标签*/
TextField { /*文本框*/
id: name
implicitWidth: 150
placeholderText: qsTr("请输入...") //(a)
focus: true
}
}
RowLayout {
spacing: 0
Label { text: "年龄" }
TextField {
id: age
implicitWidth: 150
validator: IntValidator {bottom: 16; top: 26;} //(b)
}
}
GroupBox { /* 组框 */
id: group1
title: qsTr("性别")
Layout.fillWidth: true //(c)
RowLayout {
RadioButton { /* 单选按钮 */
id: maleRBtn
text: qsTr("男")
checked: true
Layout.minimumWidth: 85 //设置控件所占最小宽度为85
anchors.horizontalCenter: parent.horizontalCenter
}
RadioButton {
id: femaleRBtn
text: qsTr("女")
Layout.minimumWidth: 65 //设置控件所占最小宽度为65
}
}
}
RowLayout {
spacing: 0
Label { text: "专业" }
ComboBox { /*组合框*/
id: speCBox
Layout.fillWidth: true
currentIndex: 0 //初始选中项(计算机)索引为0
model: ListModel { // (d)
ListElement { text: "计算机" }
ListElement { text: "通信工程" }
ListElement { text: "信息网络" }
}
width: 200
}
}
GroupBox {
id: group2
title: qsTr("爱好")
Layout.fillWidth: true
GridLayout { //网格布局
id: hobbyGrid
columns: 3
CheckBox { text: qsTr("旅游"); checked: true } // 复选框,默认选中
CheckBox { text: qsTr("游泳"); checked: true }
CheckBox { text: qsTr("篮球") }
CheckBox { text: qsTr("唱歌") }
CheckBox { text: qsTr("舞蹈") }
CheckBox { text: qsTr("网购") }
CheckBox { text: qsTr("看电视"); checked: true }
CheckBox { text: qsTr("其他"); checked: true }
}
}
Button { /*命令按钮*/
id: submit
anchors.right: group2.right //与“爱好”组框的右边框锚定
implicitWidth: 50
text: "提交"
onClicked: { //单击“提交”按钮执行的代码
var hobbyText = ""; //变量用于存放学生兴趣爱好内容
for(var i = 0; i < 7; i++) { //遍历“爱好”组框中的复选框
/*生成学生兴趣爱好文本*/
hobbyText += hobbyGrid.children[i].checked ? (hobbyGrid.children[i].text+"、"):""; //(e)
}
if(hobbyGrid.children[7].checked) { //若“其他”复选框选中
hobbyText += "..."
}
var sexText = maleRBtn.checked ? "男":"女"
/*最终生成的完整学生信息*/
stuInfo.text ="我的名字叫"+name.text+",是个"+age.text+"岁"+sexText+"生,\r\n 所学专业是"
+speCBox.currentText+",业余喜欢\r\n" + hobbyText;
}
}
}
ColumnLayout {
Layout.alignment: Qt.AlignTop //使“基本信息”文本区与表单顶端对齐
Label {
text: "基本信息"
font.pixelSize: 15
font.bold: true
}
TextArea {
id: stuInfo
Layout.fillHeight: true // 将文本区拉伸至与表单等高
implicitWidth: 240
text: "学生个人资料…" //初始文字
font.pixelSize: 14
}
}
}
}
}
其中,
- (a) placeholderText: qsTr("请输入..."):placeholderText是文本框控件的属性,它设定当文本框内容为空时其中所要显示的文本(多为提示性的文字),用于引导用户输入。
- (b) validator: IntValidator {bottom: 16; top: 26;}: validator属性是在文本框控件上设一个验证器,只有当用户的输入符合验证要求时才能被文本框接受。目前,Qt Quick支持的验证器有IntValidator (整型验证器)、DoubleValidator (双精度浮点验证器)和RegExpValidator (正则表达式验证器)三种。这里使用整型验证器,限定了文本框只能输入16~26 (学生年龄段)之间的整数值。
- (c) Layout.fillWidth: true:在Qt Quick中另有一套独立于QML的布局系统(Qt Quick布局),其所用的元素RowLayout、ColumnLayout和GridLayout类同于QML的Row、Column和Grid定位器,所在库是QtQuick.Layouts,但它比传统QML定位器的功能更加强大,本例程序就充分使用了这套全新的布局系统。该系统的Layout元素提供了很多“依附属性”,其作用等同于QML的Anchor(锚)。这里Layout.fillWidth设为true使“性别”组框在允许的约束范围内尽可能宽。此外,Layout还有其他一些常用属性,如fillHeight、minimumWidth / maximumWidth、minimumHeight / maximumHeight、alignment等,它们的具体应用请参考Qt官方文档,此处不展开。
- (d) model: ListModel {…}:往组合框下拉列表中添加项有两种方式。第一种是本例釆用的为其model属性指派一个ListModel对象,其每个ListElement子元素代表一个列表项;第二种是直接将一个字符串列表赋值给model属性。因此,本例的代码也可写为:
ComboBox {
…
model: [ "计算机通信工程", “通信工程”, “信息网络" ]
width: 200
}
- (e) hobbyText += hobbyGrid.children[i].checked ? (hobbyGrid.children[i].text+"、"):"": 这里使用了条件运算符判断每个复选框的状态,若选中,则将其文本添加到hobbyText变量中。之前在设计界面的时候,将复选框都置于GridLayout元素中,此处就可以通过其“id.children[i]”的方式来引用访问其中的每一个复选框控件。
————————————————
觉得有用的话请关注点赞,谢谢您的支持!
对于本系列文章相关示例完整代码有需要的朋友,可关注并在评论区留言!
- 上一篇: QT进阶之路:文件信息类 QFileInfo
- 下一篇: Qt应用程序主窗口:拖放操作与打印文档
猜你喜欢
- 2024-10-14 「Qt入门第31篇」 网络(一)Qt网络编程简介
- 2024-10-14 qt 做手机android的串口通讯 qt下串口通信
- 2024-10-14 Qt 读写txt文本文件(qt读入文件)
- 2024-10-14 Qt 信号槽连接不成功问题原因汇总
- 2024-10-14 QML 性能优化建议(一)(qml例程)
- 2024-10-14 C++ QT中文件的读写操作(UI界面)(qt怎么读取文件内容)
- 2024-10-14 Qt 中的智能指针(qt 函数指针)
- 2024-10-14 Qt如何读取和写入配置文件的数据(qt 读写配置文件)
- 2024-10-14 Qt pro文件中的常用宏说明(qt pro 自定义宏)
- 2024-10-14 Qt应用程序主窗口:拖放操作与打印文档
你 发表评论:
欢迎- 05-09Spring Boot3 RESTful 接口参数校验,这篇吃透就够了!
- 05-09《Spring6》第02节:基于XML方式搭建Spring6框架开发环境
- 05-09MapStruct架构设计(mapstruct @mapping)
- 05-09分布式微服务架构组件(分布式微服务架构设计)
- 05-09Java Swing组件下的JButton实例(java swing 组件)
- 05-09java基础都在这了,小主们拿去吧(java基础是指什么)
- 05-09AOP的实现落地(拦截过滤),一切都要从Servlet说起
- 05-09【Spring Boot】WebSocket 的 6 种集成方式
- 最近发表
-
- Spring Boot3 RESTful 接口参数校验,这篇吃透就够了!
- 《Spring6》第02节:基于XML方式搭建Spring6框架开发环境
- MapStruct架构设计(mapstruct @mapping)
- 分布式微服务架构组件(分布式微服务架构设计)
- Java Swing组件下的JButton实例(java swing 组件)
- java基础都在这了,小主们拿去吧(java基础是指什么)
- AOP的实现落地(拦截过滤),一切都要从Servlet说起
- 【Spring Boot】WebSocket 的 6 种集成方式
- Java 中五种最常见加密算法:原理、应用与代码实现
- 用注解进行参数校验,spring validation介绍、使用、实现原理分析
- 标签列表
-
- spire.doc (59)
- system.data.oracleclient (61)
- 按键小精灵源码提取 (66)
- pyqt5designer教程 (65)
- 联想刷bios工具 (66)
- c#源码 (64)
- graphics.h头文件 (62)
- mysqldump下载 (66)
- sqljdbc4.jar下载 (56)
- libmp3lame (60)
- maven3.3.9 (63)
- 二调符号库 (57)
- 苹果ios字体下载 (56)
- git.exe下载 (68)
- diskgenius_winpe (72)
- pythoncrc16 (57)
- solidworks宏文件下载 (59)
- qt帮助文档中文版 (73)
- satacontroller (66)
- hgcad (64)
- bootimg.exe (69)
- android-gif-drawable (62)
- axure9元件库免费下载 (57)
- libmysqlclient.so.18 (58)
- springbootdemo (64)
本文暂时没有评论,来添加一个吧(●'◡'●)