【Qt】Qt Creater界面开发案例(qml程序)——旋转的风车
点击鼠标,风车可旋转起来。
参考:https://qmldoc.cn/meet_qt_5/qt5_introduction.html
一、创建项目和文件
1 新建一个项目
2 右键选择项目->add new->选择QML File,填写好文件名、路径
3 可以观察到,项目中新增一个QML文件夹,里面有qmltest.qml文件。QML文件采用.qml作为文件格式后缀。
二、编写程序
在项目目录下的images内有三张图片。
作为一种标记语言(类似HTML)一个QML文档有且只有一个根元素,在这个例子中使用Image元素作为根元素,这个元素的宽度、高度与"images/background.png"图像相同。
import QtQuick 2.5Image {id: rootsource: "images/background.png"
}
QML中不限制根元素类型,在上面这段代码中我们设置了Image元素的source属性作为我们的背景图像,它也是我们的根元素。
每个元素都有属性,比如Image有width和height,也会有其它的属性如source。Image元素的尺寸会自动与source设置的图像匹配。想要自定义Image元素的尺寸必须显式的定义width和height的值。
大多数标准元素都在QtQuick模块中,通常我们在导入声明中首先包含这个模块。
id是个特殊的属性,它可以作为一个标识符在当前文档内引用对应的元素。
注意:id被定义后无法再改变,在程序执行期间也无法被赋值。使用root作为根元素id仅仅是作者的习惯,这样可以在复杂的QML文档中快速引用最顶层元素。
我们使用分离的风车竿和风车的图片作为前景元素。
风车竿需要放置在背景的水平居中位置,并且竿的底部与背景底部平行。风车需要放置在背景中央位置。
通常用户界面由不同的类型的元素组成,而不是像这个示例只有图像。
Image {id: root...Image {id: poleanchors.horizontalCenter: parent.horizontalCenteranchors.bottom: parent.bottomsource: "images/pole.png"}Image {id: wheelanchors.centerIn: parentsource: "images/pinwheel.png"}...
}
为了将风车放在中央,我们需要使用一个较复杂的属性anchor。锚点可以指定对象与父对象和同级对象的相对几何位置,比如定义元素放在另一个元素的中央(anchors.centerIn: parent)。锚点定义时两端都可以定义元素的左侧(left)、右侧(right)、顶部(top)、底部(bottom)、居中(centerIn)、填充(fill)、垂直居中(verticalCenter )和水平居中(horizontalCenter )相对位置。当然它们必须是可以匹配,无法定义一个元素的左侧与另一个元素的顶部对齐。
这样我就能设置风车的位置在我们背景元素的中央了。
为了让我们的展示更加有趣一点,我们应该让程序有一些交互功能。当用户点击场景上某个位置时,让我们的风车转动起来。
我们使用mouseArea元素,并且让它与我们的根元素大小一样。
Image {id: root...MouseArea {anchors.fill: parentonClicked: wheel.rotation += 90}...
}
当用户点击覆盖区域时,鼠标区域会发出一个信号。你可以重写onClicked函数来链接这个信号。在这个案例中引用了风车的图像并且让他旋转增加90度。
对于每个工作的信号,命名方式都是on + SignalName的标题。当属性的值发生改变时也会发出一个信号。它们的命名方式是:on + PropertyName + Chagned。 如果一个宽度(width)属性改变了,你可以使用onWidthChanged: print(width)来得到这个监控这个新的宽度值。
现在风车将会旋转,但是还不够流畅。风车的旋转角度属性被直接改变了。我们应该怎样让90度的旋转可以持续一段时间呢。现在是动画效果发挥作用的时候了。一个动画定义了一个属性的在一段时间内的变化过程。为了实现这个效果,我们使用一个动画类型叫做属性行为。这个行为指定了一个动画来定义属性的每一次改变并赋值给属性。每次属性改变,动画都会运行。这是QML中声明动画的几种方式中的一种方式。
Image {id: rootImage {id: wheelBehavior on rotation {NumberAnimation {duration: 250}}}
}
现在每当风车旋转角度发生改变时都会使用NumberAnimation来实现250毫秒的旋转动画效果。每一次90度的转变都需要花费250ms。
按照上面的流程,可以写出如下的代码。
qmltest.qml程序
import QtQuick 2.0Image {id: rootsource: "images/background.png"MouseArea{anchors.fill: parentonClicked: wheel.rotation += 90}Image{id:poleanchors.horizontalCenter: parent.horizontalCenteranchors.bottom: parent.bottomsource: "images/pole.png"}Image{id:wheelBehavior on rotation {NumberAnimation{duration: 250}}anchors.horizontalCenter: parent.horizontalCenteranchors.bottom: parent.bottomsource: "images/pinwheel.png"}}
三、运行代码
选择qmltest.qml右键->Open Commonda Prompt With->Run Enveriment
输入命令:qml qmltest.qml
可得到如下动画。
【Qt】Qt Creater界面开发案例(qml程序)——旋转的风车相关推荐
- python界面开发案例:制作一个计算器软件
前言 大家早好.午好.晚好吖 ❤ ~欢迎光临本文章 在我们手机上大家都有一个计算器,对吧 那它这功能是怎么实现的呢? 今天我们在电脑上来实现一个电脑端计算器界面~ 开发环境: Python 3.8 / ...
- Qt界面开发案例:图表主题示例
Qt是一个跨平台框架,通常用作图形工具包,它不仅创建CLI应用程序中非常有用.而且它也可以在三种主要的台式机操作系统以及移动操作系统(如Symbian,Nokia Belle,Meego Harmat ...
- Qt 物联网系统界面开发 “ 2022湖南省大学生物联网应用创新设计竞赛技能赛 ——应用物联网的共享电动自行车 ”
文章目录 前言 一.实现效果 视频演示 二.程序设计 1. 界面背景图设计 2. 信号槽设计 3. 定时器设计 4. 动态曲/折线图的设计 5. 摄像头扫码 6. 注册设计 7. 登录设计 8. 巡检 ...
- OPPO官网web界面开发案例
成品 一.框架实现 构建top,header,nav,banner,star,accessory,world,serve,after_sale,footer10个部分框架,然后再逐步构建每一部分. i ...
- 为什么 qt 成为 c++ 界面编程的第一选择?
关注+星标公众号,不错过精彩内容 转自 | 技术让梦想更伟大 来源: https://blog.csdn.net/jiedichina/article/details/78547067 Qt可以说是U ...
- 为什么qt成为c++界面编程的第一选择
一.前言 为什么现在QT越来越成为界面编程的第一选择,笔者从事qt界面编程已经有接近8年,在这之前我做C++界面都是基于MFC,也做过5年左右.当时为什么会从MFC转到QT,主要原因是MFC开发界面想 ...
- python实现桌面软件界面开发?
推荐使用qt designer进行界面开发,生成的ui后缀文件复制到项目目录,再使用命令生成py文件,然后新建一个py文件加载该UI便可,操作步骤,请前往http://1024k.net 1. 使用命 ...
- qt程序在Linux下字体乱了,解决linux/Ubuntu下Qt creater 界面程序在编译运行后无法显示中文或中文乱码问题!...
本文解决的主要是界面程序编译运行后无法显示中文的问题,如果在creater 中无法输入中文,下载个IBus或者搜狗之类的中文输入法即可解决! 首先说乱码问题,这个很好解决: 如果是在linux下打开W ...
- qt登录界面跳转_每天10分钟,木辛老师带你实战慕课软件开发:登录界面开发第2课...
软件实战开始,快速提供编程能力:通过实战,分析产品需求,梳理设计需求,提升项目分析和架构的能力.快点跟着木辛老师一起学习吧! 请点击右上角"关注"按钮关注我们哟:跟着木辛老师学习P ...
最新文章
- springboot-6-整合jdbc
- 5、ShardingSphere 之 公共表
- python登陆界面代码_python编辑用户登入界面的实现代码
- 程序员基本功01数组与内存控制
- Sharepoint2007个人网站不能同步域信息的处理方法
- c#如何实现在datagridview中加入时间控件、numericupanddown控件
- 流程控制: jQ Deferred 与 ES6 Promise 使用新手向入坑!
- Remap 后的 USART1 不能发送数据
- iOS之摇一摇功能实现
- SpringCloud微服务架构前后端分离项目实践
- How to deactive Virus scan via view IWFNDCCONFIG
- 你可曾了解过,数据分析师与商业数据分析师?
- vue2的堆叠轮播图 (5张图 错开叠加,来回切换)
- 形态学操作之膨胀与腐蚀
- php短信接口开发(http协议)
- MCDF_SV_lab3
- WebRTC编译篇之Ninja 编译系统 二
- 淘宝同款、相似款查找
- 系统迁移-win10
- C++:实现将摄氏度转换为华氏度
热门文章
- Opencv图像缩放和平移
- 微信小程序之引入使用Vant Weapp组件
- html怎么使两个div模块并列居中,css怎样让两个div重叠,怎么让整个div居中
- iOS开发支付篇——内购(IAP)详解
- 如何理解GMM模型及应用
- [附源码]java+ssm计算机毕业设计教师资格线上考试模拟系统gka9u(源码+程序+数据库+部署)
- 实验2:配置DHCPv6
- My Batis入门
- 框架源码 bootstrap html5 mysql oracle sqlsever
- windos10+ubuntu16.4安装历程(超级详细,解决识别不出未分配空间等问题)