百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

各种图文并茂的示例,让我们快速进入qml世界

bigegpt 2024-09-16 12:12 6 浏览

由于项目的原因,接触到qml语言。经过一段时间的熟悉和使用,发现只要有基本的开发能力,那么快速掌握qml的入门知识,并不难。

本文首先将简单介绍qml, 紧接着引入第一个入门例子hello world。然后将采用图文并茂的示例来介绍qml的界面布局、监听事件、简单动画效果、自定义属性、自定组件等。最后再总结概述。

一、qml简介

qml是一种描述性的脚本语言,语法类似css, 可以在脚本中创建图像对象,并支持各种特效,并且文件是以.qml结尾。

qml文档描述 了一个对象树。各个元素可以以嵌套的方式来组合成复杂的图形功能。q ml是Qt quick的核心组件之一。

qml是运行时解释,不需要重新编译。

二、第一个例子

使用Qt Creator来创建空的qml工程,注意本文所有的示例均使用了Qt5.9的版本。

创建工程完成之后,pro文件添加使用quick组件,并且配置使用了C++11

main.cpp的内容如下所示,这里可以暂时不需要了解其内容含义。只需要知道 这是程序启动的入口。

然后我们来介绍下main.qml的内容含义,import需要使用的组件,Window表示的是一个窗体,内部内容使用大括号包含起来,visible设置窗体的可见性,width表示窗体的宽度,height表示窗体的高度,title设置窗体的标题。

运行后的效果图,是一个标题为Hello World的空窗体。

三、界面布局

qml通过anchor锚点来进行界面的布局, 首先看下效果图,一个黑色背景窗体,四边有四个红色边框的白色矩形,中间一个红色边框的白色正方形。

qml文件的实现如下,关键字Rectangle表示一个矩形组件,Rectangle可以嵌套使用。接下来说明顶部白色矩形的实现,定义id为topBar, 背景色color是白色,边框border.width的宽度是2,边框颜色border.color是红色。anchors.left: leftBar.right表示顶部矩形的左侧位于左侧边框的右侧。

四、函数功能

qml支持函数功能,通过两个不同时刻窗口对比来查看效果,左侧窗口是当窗体宽度小于320像素的效果,右侧窗口是当窗体宽度小于640像素的效果。

qml文件实现中,Rectangle包含了Text文本对象,Text内部定义了函数getColor,当Rectangle的宽度小于320时,返回red, 当宽度小于等于640时,返回black, 其他情况返回blue。

五、动画效果

qml支持动画效果,首先看下使用Behavior的效果图,窗体分为上下两个矩形,当鼠标按下上方区域不动的时候,下方矩形中的正方形就会从左上角移动到右下角,当鼠标释放的时候,正方形又会从右下角回到左上角。

qml文件中,上方矩形实现鼠标按下和释放的监控事件,并且接受事件中,修改下方矩形的x和y的坐标值。下方矩形实现上图所示的动画效果,easing.type指定的是一种缓和曲线。

六、自定义属性

qml支持自定义属性,调用自定义属性值显示文本信息

qml文件中,自定义属性以关键字property开始,然后是说明类型,最后是属性的名称和值。

七、自定义组件

qml没有提供直接的圆形组件,所以,这里自定义圆形组件。

实现圆形组件Circle.qml, 定义了整型属性d, 可以由外部传入,radius表示半径。

然后看下main.qml如何调用呢,其使用方法与通用组件的方式是一样的,如下所示自定义圆形组件Circle的使用。

八、Column定位器

qml提供的定位器的功能,比如Row、Column、Grid、Flow。下面就看下Column的使用效果。

首先自定义组件Article.qml, 该组件接受两个属性值,并且分别显示到两个Text对象上。

main.qml中使用Column定位器来组织显示Article对象。

九、注册单例

qml还支持注册C++的单例模型,然后在qml中直接调用,实现了与C++代码的通信。

实现实现用于事件上报的单例模型,具体实现代码如下所示。

然后在main.cpp中将EventSender注册到qml中, 后续qml文件才能调用

最后看下qml如何调用上面注册成功的单例,很简单,只要import EventSender, 然后就可以调用EventSender的函数。

十、总结

本文通过一个简单的例子开始qml的学习,然后结合示例分别介绍说明了锚布局、函数功能、动画效果、自定义属性、自定义组件、定位器、注册单例的使用方法。这些基本的例子可以为后续深入的学习打下基础,同时也分享出来给大家参考。

相关推荐

最全的MySQL总结,助你向阿里“开炮”(面试题+笔记+思维图)

前言作为一名编程人员,对MySQL一定不会陌生,尤其是互联网行业,对MySQL的使用是比较多的。对于求职者来说,MySQL又是面试中一定会问到的重点,很多人拥有大厂梦,却因为MySQL败下阵来。实际上...

Redis数据库从入门到精通(redis数据库设计)

目录一、常见的非关系型数据库NOSQL分类二、了解Redis三、Redis的单节点安装教程四、Redis的常用命令1、Help帮助命令2、SET命令3、过期命令4、查找键命令5、操作键命令6、GET命...

netcore 急速接入第三方登录,不看后悔

新年新气象,趁着新年的喜庆,肝了十来天,终于发了第一版,希望大家喜欢。如果有不喜欢看文字的童鞋,可以直接看下面的地址体验一下:https://oauthlogin.net/前言此次带来得这个小项目是...

精选 30 个 C++ 面试题(含解析)(c++面试题和答案汇总)

大家好,我是柠檬哥,专注编程知识分享。欢迎关注@程序员柠檬橙,编程路上不迷路,私信发送以下关键字获取编程资源:发送1024打包下载10个G编程资源学习资料发送001获取阿里大神LeetCode...

Oracle 12c系列(一)|多租户容器数据库

作者杨禹航出品沃趣技术Oracle12.1发布至今已有多年,但国内Oracle12C的用户并不多,随着12.2在去年的发布,选择安装Oracle12c的客户量明显增加,在接下来的几年中,Or...

flutter系列之:UI layout简介(flutter-ui-nice)

简介对于一个前端框架来说,除了各个组件之外,最重要的就是将这些组件进行连接的布局了。布局的英文名叫做layout,就是用来描述如何将组件进行摆放的一个约束。在flutter中,基本上所有的对象都是wi...

Flutter 分页功能表格控件(flutter 列表)

老孟导读:前2天有读者问到是否有带分页功能的表格控件,今天分页功能的表格控件详细解析来来。PaginatedDataTablePaginatedDataTable是一个带分页功能的DataTable,...

Flutter | 使用BottomNavigationBar快速构建底部导航

平时我们在使用app时经常会看到底部导航栏,而在flutter中它的实现也较为简单.需要用到的组件:BottomNavigationBar导航栏的主体BottomNavigationBarI...

Android中的数据库和本地存储在Flutter中是怎样实现的

如何使用SharedPreferences?在Android中,你可以使用SharedPreferencesAPI来存储少量的键值对。在Flutter中,使用Shared_Pref...

Flet,一个Flutter应用的实用Python库!

▼Flet:用Python轻松构建跨平台应用!在纷繁复杂的Python框架中,Flet宛如一缕清风,为开发者带来极致的跨平台应用开发体验。它用最简单的Python代码,帮你实现移动端、桌面端...

flutter系列之:做一个图像滤镜(flutter photo)

简介很多时候,我们需要一些特效功能,比如给图片做个滤镜什么的,如果是h5页面,那么我们可以很容易的通过css滤镜来实现这个功能。那么如果在flutter中,如果要实现这样的滤镜功能应该怎么处理呢?一起...

flutter软件开发笔记20-flutter web开发

flutterweb开发优势比较多,采用统一的语言,就能开发不同类型的软件,在web开发中,特别是后台式软件中,相比传统的html5开发,更高效,有点像c++编程的方式,把web设计出来了。一...

Flutter实战-请求封装(五)之设置抓包Proxy

用了两年的flutter,有了一些心得,不虚头巴脑,只求实战有用,以供学习或使用flutter的小伙伴参考,学习尚浅,如有不正确的地方还望各路大神指正,以免误人子弟,在此拜谢~(原创不易,转发请标注来...

为什么不在 Flutter 中使用全局变量来管理状态

我相信没有人用全局变量来管理Flutter应用程序的状态。毫无疑问,我们的Flutter应用程序需要状态管理包或Flutter的基本小部件(例如InheritedWidget或St...

Flutter 攻略(Dart基本数据类型,变量 整理 2)

代码运行从main方法开始voidmain(){print("hellodart");}变量与常量var声明变量未初始化变量为nullvarc;//未初始化print(c)...