Qt学习:QML文件的编辑,以及各项组件的简单创建

2024-03-29 13:48

本文主要是介绍Qt学习:QML文件的编辑,以及各项组件的简单创建,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Qt学习:QML文件的编辑,以及各项组件的简单创建

文章目录

  • Qt学习:QML文件的编辑,以及各项组件的简单创建
    • 1.QML的简单介绍
    • 2.Qtqucik项目的总体架构介绍
    • 3.Qml文件的简单编辑
      • 3.1添加Button按钮组件
      • 3.2矩形框Rectangle的绘画
      • 3.3标签类(Label)的简单使用
      • 3.4输入文本框(TextField)的简单创建
      • 3.5 复选框的简单创建
      • 3.6 延时按钮(DelayButton)的创建
      • 3.7单选按钮 (RadioButton)的创建
    • 结语

1.QML的简单介绍

​ QML是一种编程语言,用该语言所写的文件格式为.qml,是qt编辑器中Qtqucik项目的核心组件之一。Qt Quick是一组旨在帮助开发者创建在移动电话,媒体播放器,机顶盒和其他便携设备上使用越来越多的直观、现代、流畅UI的工具集合。

2.Qtqucik项目的总体架构介绍

​ 在创建完QTqucik项目后,编辑器会为我们自动创造一些文件,整个项目架构如下

在这里插入图片描述

pro文件是是工程文件,类似VS项目中的sln文件,点击打开就可以展开整个项目。

main.cpp是整个项目的执行文件,他通过读取我们编辑好的qml,然后被系统编译执行(这里编译系统我选择qmake,选择cmake莫名其妙会报错),就可以创建我们在qml中定义好的各组件

const QUrl url(QStringLiteral("qrc:/main.qml"));
//main.cpp中这一行导入我们编辑的main.qml文件

那么在本次介绍中,我们只会对qml文件进行编辑,即在main.qml文件中编辑,然后被main.cpp导入,编译执行,达到我们所要的效果。

qml文件在resource资源文件夹下,该文件夹下我们可以存放各项资源,比如图标,数据之类的。

3.Qml文件的简单编辑

我们进入main.qml文件查看刚创建的main.qml文件,如下

import QtQuick 2.15
import QtQuick.Window 2.15Window {width: 640//指定整个窗体的长宽height: 480visible: true //设置窗体可视化title: qsTr("Hello World") //使用qstr可以让该字符串被标记,可以被翻译
}

qml的语法非常简单,左边变量,右边赋值,简洁明了通过这个我们可以创造一个窗体,他的标题为Hello World

在这里插入图片描述

那么这只是一个窗体,我们可以给他加各项组件,按钮,文本框,复选框,单选框,改变布局,接下来我们一一介绍

3.1添加Button按钮组件

该组件在QtQuick.Controls 包里,我们这里直接在窗体内部定义按钮,他会自动显示

Window {width: 640height: 480visible: truetitle: qsTr("Hello World")Button {id: button1x:100 //x,y坐标控制按钮在窗体的位置y:100 text: "TAT"  //设置该信号的文本//这里我们根据信号槽机制,监听信号设置每次点击(clicked)信号发生时,我们做出恢复onClicked: {console.log("123")}}}

可以看到我们多次点击终端会不断输出123

在这里插入图片描述

同时我们对按钮可以给他添加图标,我们需要先将图片资源导入resource资源文件夹下,也就是qrc文件,右键点击qrc文件 选择 add existing …将图片导入,我们就可以看到改图片被导入我们资源文件qrc中了

在这里插入图片描述

那么我们接下来直接右键点击该图片,复制他的URL就可以了,

    Button {id: button1x:100y:100onClicked: {console.log("123")}icon.source: "qrc:/OK.png" //指定图标的资源文件}

我们执行一下之后可以看到图标,就被引用了

在这里插入图片描述

那么我们在这里可以添加多个按钮,为了方便对每个按钮的控制,我们对每个按钮都设置一个id,利用这个ID去查看每个按钮的各项状态属性,如下

 //这里我设置四个按钮为了防止重叠我将每个按钮的位置都设置不同的Button {id: button1x:100y:100text:"TAT"onClicked: {console.log("123")}icon.source: "qrc:/OK.png"}Button {id: button2x:200y:200text:"TAT"onClicked: {console.log("123")}icon.source: "qrc:/OK.png"}Button {id: button3x:300y:300text:"TAT"onClicked: {console.log("123")}icon.source: "qrc:/OK.png"}Button {id: button4x:400y:400text:"TAT"onClicked: {console.log("123")}icon.source: "qrc:/OK.png"}

效果如下

在这里插入图片描述

但是这样好像按钮有点杂乱无章,那么怎么办呢,这里我们使布局方式对每个按钮的摆放进行修改

 Button {id: button1x:100y:100text:"TAT"onClicked: {console.log("123")}anchors.bottom: button2.topanchors.left: button2.lefticon.source: "qrc:/OK.png"}Button {id: button2anchors.centerIn: parentx:200y:200text:"TAT"onClicked: {console.log("123")}icon.source: "qrc:/OK.png"}Button {id: button3x:300y:300text:"TAT"anchors.top: button2.bottomanchors.right: button2.rightonClicked: {console.log("123")}icon.source: "qrc:/OK.png"}Button {id: button4anchors.top: button3.bottomanchors.right: button3.rightx:400y:400text:"TAT"onClicked: {console.log("123")}icon.source: "qrc:/OK.png"}

这里我们使用锚式布局(详情可以参考QT的帮助文档),让button2的按钮设置在文本中心,其他按钮依次与它顶部,左右对齐,这样我们就可以让所有按钮都处在中心的同一列

在这里插入图片描述

3.2矩形框Rectangle的绘画

讲完按钮的简单使用,接下来我们来使用矩形框,这里我们根据帮助文档来说明

在这里插入图片描述

其中他继承了父类的x,y,width,height我们这里就不说明了,border是指矩形框的便于,比如给边缘添加颜色,边缘的宽度。color是rectangle矩形框填充的颜色,grdient是控制颜色渐变的,radius是我们默认绘画圆角矩形的半径,但是当radius过大时整个圆角矩形就会变成圆形,帮助文档中说明:
要创建一个具有略微圆角的相对方形,请使用较小的值,例如3。

要创建完全圆形的,请使用等于矩形宽度或高度一半的值,并使矩形的宽度和高度相同。

那么这里我们创建一个拥有渐变色的圆角矩形框

     Rectangle {width: 100height: 100color: "red"//borde是边框属性border.color: "black"border.width: 5//radius控制绘画圆角矩形框,当半径过大时候,会变成圆radius: 10//gradient 是控制矩形框的颜色渐变的//渐变色会跟COLOR的值起冲突最终图形的颜色只会取值一个//position的值为0到1之间gradient: Gradient {GradientStop { position: 0.0; color: "white" }GradientStop { position: 1.0; color: "black" }}} //绘制矩形框
}

在这里插入图片描述

3.3标签类(Label)的简单使用

标签类一般用于提示文字等功能,我们这里使用Label就可以创建,

Label{//设置整个标签居中anchors.centerIn: parentwidth: 200height: 30//让文本处于整个背景之间horizontalAlignment: Text.AlignHCenterverticalAlignment: Text.AlignVCenter //这样将文本布局控制在背景中间text: qsTr("我是标签") //qstr可以将该文本编译font.bold: true //对于标签内部字体我们加粗显示font.pixelSize: 20 //每个像素的大小background: Rectangle{color: "red"}} //这里是设置整个背景的格式,我们使用矩形框来完成}

这样我们就创建了一个以红色矩形为背景,并且内部字体居中加粗的标签框

在这里插入图片描述

3.4输入文本框(TextField)的简单创建

输入文本框,也就是类似于我们登录界面的输入账户密码的文本框,用户可以在里面输入文本,而系统也可以读取用户的输入,在界面设计中广泛应用,这里我们在代码中对他进行简单创建

  TextField{id:textfieldtext: "23333"onTextChanged: {console.log(text) //每次输入我们改变文本}onAccepted: {console.log(text)}// 这个是响应回车键的信号}

我们在代码中设置每次文本该的时候我们输出文本,每次回车键的时候,我们输出文本,可以看到实际上系统也实现了这样的功能

在这里插入图片描述

3.5 复选框的简单创建

​ 复选框是我们在可以多次改变是否选中的框,比如在注册的时候同意某用户协议,那个勾选框,我们一次点击,算选中,二次点击就可以取消选中

     CheckBox{//通过 命名id我们可以间接引用该信号的值id:firstx:200y:200checked: truetext: qsTr("red")onCheckedChanged: {console.log(checked)}//打印信号机制}
}

这里我们设置每次框选中状态改变的时候我们输出是否被选中,可以看到,这是一个bool值,并且一直在被改变中

在这里插入图片描述

3.6 延时按钮(DelayButton)的创建

延时按钮是我们可以人为设置长按点击时间来实现按钮选中的组件,常见于各种游戏或者人机验证(当然现在采用的人机验证很多都是选择图片),我们在这里创建延时按钮如下

 DelayButton{x:200y:200text: "delay"delay: 4000 //延迟时间单位为4000ms//要我们长按才能选中成功onProgressChanged:  {console.log(progress) //点击成功的进度}onCheckedChanged: {console.log(checked) //输出按钮是否被点击的状态}}
}

我们在点击图中只要一旦取消不再长按,原本点击进度就会不断取消,我这里设置每次都把进度输出并且在最终点击完成的时候输出按钮当前的状态,我们查看一下效果

在这里插入图片描述

3.7单选按钮 (RadioButton)的创建

在进行某些选择的情况下,我们给出多个选项但是我们只会让用户选择一个,这样的按钮我们称为单选按钮,我在这里创建三个单选按钮可以看到我们每次只能点击一个按钮,点击其他的按钮之前选择会自动取消,这里我们通过输出每个按钮是否被选中来查看

 //单选按钮,并且每一个都提前设置为选中
ColumnLayout{RadioButton{id:firstchecked: truetext: "first"onCheckedChanged: {console.log(first.checked,second.checked,third.checked)}}RadioButton{id:secondchecked: truetext: "second"onCheckedChanged: {console.log(first.checked,second.checked,third.checked)}}RadioButton{id:thirdchecked: truetext: "Third"onCheckedChanged: {console.log(first.checked,second.checked,third.checked)}}}

可以看到每次只有一个单选按钮被选中,并且一旦选择其他的原有的被选中的按钮就自动取消,这就是单选按钮的特性。

在这里插入图片描述

结语

在本篇博客中,我简单介绍了QML文件的简单语法,以及对于文件整体布局,各县组件都进行了简单使用,但由于博主对于QT处于刚开始学习状态,博客中难免出现错误,对于博客中有任何疑问或者建议可以在评论区交流谢谢。

这篇关于Qt学习:QML文件的编辑,以及各项组件的简单创建的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/858762

相关文章

创建Java keystore文件的完整指南及详细步骤

《创建Javakeystore文件的完整指南及详细步骤》本文详解Java中keystore的创建与配置,涵盖私钥管理、自签名与CA证书生成、SSL/TLS应用,强调安全存储及验证机制,确保通信加密和... 目录1. 秘密键(私钥)的理解与管理私钥的定义与重要性私钥的管理策略私钥的生成与存储2. 证书的创建与

Qt使用QSqlDatabase连接MySQL实现增删改查功能

《Qt使用QSqlDatabase连接MySQL实现增删改查功能》这篇文章主要为大家详细介绍了Qt如何使用QSqlDatabase连接MySQL实现增删改查功能,文中的示例代码讲解详细,感兴趣的小伙伴... 目录一、创建数据表二、连接mysql数据库三、封装成一个完整的轻量级 ORM 风格类3.1 表结构

解读GC日志中的各项指标用法

《解读GC日志中的各项指标用法》:本文主要介绍GC日志中的各项指标用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、基础 GC 日志格式(以 G1 为例)1. Minor GC 日志2. Full GC 日志二、关键指标解析1. GC 类型与触发原因2. 堆

Qt QCustomPlot库简介(最新推荐)

《QtQCustomPlot库简介(最新推荐)》QCustomPlot是一款基于Qt的高性能C++绘图库,专为二维数据可视化设计,它具有轻量级、实时处理百万级数据和多图层支持等特点,适用于科学计算、... 目录核心特性概览核心组件解析1.绘图核心 (QCustomPlot类)2.数据容器 (QCPDataC

python如何创建等差数列

《python如何创建等差数列》:本文主要介绍python如何创建等差数列的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python创建等差数列例题运行代码回车输出结果总结python创建等差数列import numpy as np x=int(in

怎么用idea创建一个SpringBoot项目

《怎么用idea创建一个SpringBoot项目》本文介绍了在IDEA中创建SpringBoot项目的步骤,包括环境准备(JDK1.8+、Maven3.2.5+)、使用SpringInitializr... 目录如何在idea中创建一个SpringBoot项目环境准备1.1打开IDEA,点击New新建一个项

如何使用Maven创建web目录结构

《如何使用Maven创建web目录结构》:本文主要介绍如何使用Maven创建web目录结构的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录创建web工程第一步第二步第三步第四步第五步第六步第七步总结创建web工程第一步js通过Maven骨架创pytho

Qt如何实现文本编辑器光标高亮技术

《Qt如何实现文本编辑器光标高亮技术》这篇文章主要为大家详细介绍了Qt如何实现文本编辑器光标高亮技术,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录实现代码函数作用概述代码详解 + 注释使用 QTextEdit 的高亮技术(重点)总结用到的关键技术点应用场景举例示例优化建议

Qt 设置软件版本信息的实现

《Qt设置软件版本信息的实现》本文介绍了Qt项目中设置版本信息的三种常用方法,包括.pro文件和version.rc配置、CMakeLists.txt与version.h.in结合,具有一定的参考... 目录在运行程序期间设置版本信息可以参考VS在 QT 中设置软件版本信息的几种方法方法一:通过 .pro

MySQL 用户创建与授权最佳实践

《MySQL用户创建与授权最佳实践》在MySQL中,用户管理和权限控制是数据库安全的重要组成部分,下面详细介绍如何在MySQL中创建用户并授予适当的权限,感兴趣的朋友跟随小编一起看看吧... 目录mysql 用户创建与授权详解一、MySQL用户管理基础1. 用户账户组成2. 查看现有用户二、创建用户1. 基