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

相关文章

Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案

《Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案》:本文主要介绍Vue3组件中getCurrentInstance()获取App实例,但是返回nu... 目录vue3组件中getCurrentInstajavascriptnce()获取App实例,但是返回n

Qt中QGroupBox控件的实现

《Qt中QGroupBox控件的实现》QGroupBox是Qt框架中一个非常有用的控件,它主要用于组织和管理一组相关的控件,本文主要介绍了Qt中QGroupBox控件的实现,具有一定的参考价值,感兴趣... 目录引言一、基本属性二、常用方法2.1 构造函数 2.2 设置标题2.3 设置复选框模式2.4 是否

QT进行CSV文件初始化与读写操作

《QT进行CSV文件初始化与读写操作》这篇文章主要为大家详细介绍了在QT环境中如何进行CSV文件的初始化、写入和读取操作,本文为大家整理了相关的操作的多种方法,希望对大家有所帮助... 目录前言一、CSV文件初始化二、CSV写入三、CSV读取四、QT 逐行读取csv文件五、Qt如何将数据保存成CSV文件前言

Qt中QUndoView控件的具体使用

《Qt中QUndoView控件的具体使用》QUndoView是Qt框架中用于可视化显示QUndoStack内容的控件,本文主要介绍了Qt中QUndoView控件的具体使用,具有一定的参考价值,感兴趣的... 目录引言一、QUndoView 的用途二、工作原理三、 如何与 QUnDOStack 配合使用四、自

SpringQuartz定时任务核心组件JobDetail与Trigger配置

《SpringQuartz定时任务核心组件JobDetail与Trigger配置》Spring框架与Quartz调度器的集成提供了强大而灵活的定时任务解决方案,本文主要介绍了SpringQuartz定... 目录引言一、Spring Quartz基础架构1.1 核心组件概述1.2 Spring集成优势二、J

Qt spdlog日志模块的使用详解

《Qtspdlog日志模块的使用详解》在Qt应用程序开发中,良好的日志系统至关重要,本文将介绍如何使用spdlog1.5.0创建满足以下要求的日志系统,感兴趣的朋友一起看看吧... 目录版本摘要例子logmanager.cpp文件main.cpp文件版本spdlog版本:1.5.0采用1.5.0版本主要

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

Mysql表的简单操作(基本技能)

《Mysql表的简单操作(基本技能)》在数据库中,表的操作主要包括表的创建、查看、修改、删除等,了解如何操作这些表是数据库管理和开发的基本技能,本文给大家介绍Mysql表的简单操作,感兴趣的朋友一起看... 目录3.1 创建表 3.2 查看表结构3.3 修改表3.4 实践案例:修改表在数据库中,表的操作主要

springboot简单集成Security配置的教程

《springboot简单集成Security配置的教程》:本文主要介绍springboot简单集成Security配置的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录集成Security安全框架引入依赖编写配置类WebSecurityConfig(自定义资源权限规则

idea中创建新类时自动添加注释的实现

《idea中创建新类时自动添加注释的实现》在每次使用idea创建一个新类时,过了一段时间发现看不懂这个类是用来干嘛的,为了解决这个问题,我们可以设置在创建一个新类时自动添加注释,帮助我们理解这个类的用... 目录前言:详细操作:步骤一:点击上方的 文件(File),点击&nbmyHIgsp;设置(Setti