点击鼠标,风车可旋转起来。

参考: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程序)——旋转的风车相关推荐

  1. python界面开发案例:制作一个计算器软件

    前言 大家早好.午好.晚好吖 ❤ ~欢迎光临本文章 在我们手机上大家都有一个计算器,对吧 那它这功能是怎么实现的呢? 今天我们在电脑上来实现一个电脑端计算器界面~ 开发环境: Python 3.8 / ...

  2. Qt界面开发案例:图表主题示例

    Qt是一个跨平台框架,通常用作图形工具包,它不仅创建CLI应用程序中非常有用.而且它也可以在三种主要的台式机操作系统以及移动操作系统(如Symbian,Nokia Belle,Meego Harmat ...

  3. Qt 物联网系统界面开发 “ 2022湖南省大学生物联网应用创新设计竞赛技能赛 ——应用物联网的共享电动自行车 ”

    文章目录 前言 一.实现效果 视频演示 二.程序设计 1. 界面背景图设计 2. 信号槽设计 3. 定时器设计 4. 动态曲/折线图的设计 5. 摄像头扫码 6. 注册设计 7. 登录设计 8. 巡检 ...

  4. OPPO官网web界面开发案例

    成品 一.框架实现 构建top,header,nav,banner,star,accessory,world,serve,after_sale,footer10个部分框架,然后再逐步构建每一部分. i ...

  5. 为什么 qt 成为 c++ 界面编程的第一选择?

    关注+星标公众号,不错过精彩内容 转自 | 技术让梦想更伟大 来源: https://blog.csdn.net/jiedichina/article/details/78547067 Qt可以说是U ...

  6. 为什么qt成为c++界面编程的第一选择

    一.前言 为什么现在QT越来越成为界面编程的第一选择,笔者从事qt界面编程已经有接近8年,在这之前我做C++界面都是基于MFC,也做过5年左右.当时为什么会从MFC转到QT,主要原因是MFC开发界面想 ...

  7. python实现桌面软件界面开发?

    推荐使用qt designer进行界面开发,生成的ui后缀文件复制到项目目录,再使用命令生成py文件,然后新建一个py文件加载该UI便可,操作步骤,请前往http://1024k.net 1. 使用命 ...

  8. qt程序在Linux下字体乱了,解决linux/Ubuntu下Qt creater 界面程序在编译运行后无法显示中文或中文乱码问题!...

    本文解决的主要是界面程序编译运行后无法显示中文的问题,如果在creater 中无法输入中文,下载个IBus或者搜狗之类的中文输入法即可解决! 首先说乱码问题,这个很好解决: 如果是在linux下打开W ...

  9. qt登录界面跳转_每天10分钟,木辛老师带你实战慕课软件开发:登录界面开发第2课...

    软件实战开始,快速提供编程能力:通过实战,分析产品需求,梳理设计需求,提升项目分析和架构的能力.快点跟着木辛老师一起学习吧! 请点击右上角"关注"按钮关注我们哟:跟着木辛老师学习P ...

最新文章

  1. springboot-6-整合jdbc
  2. 5、ShardingSphere 之 公共表
  3. python登陆界面代码_python编辑用户登入界面的实现代码
  4. 程序员基本功01数组与内存控制
  5. Sharepoint2007个人网站不能同步域信息的处理方法
  6. c#如何实现在datagridview中加入时间控件、numericupanddown控件
  7. 流程控制: jQ Deferred 与 ES6 Promise 使用新手向入坑!
  8. Remap 后的 USART1 不能发送数据
  9. iOS之摇一摇功能实现
  10. SpringCloud微服务架构前后端分离项目实践
  11. How to deactive Virus scan via view IWFNDCCONFIG
  12. 你可曾了解过,数据分析师与商业数据分析师?
  13. vue2的堆叠轮播图 (5张图 错开叠加,来回切换)
  14. 形态学操作之膨胀与腐蚀
  15. php短信接口开发(http协议)
  16. MCDF_SV_lab3
  17. WebRTC编译篇之Ninja 编译系统 二
  18. 淘宝同款、相似款查找
  19. 系统迁移-win10
  20. C++:实现将摄氏度转换为华氏度

热门文章

  1. Opencv图像缩放和平移
  2. 微信小程序之引入使用Vant Weapp组件
  3. html怎么使两个div模块并列居中,css怎样让两个div重叠,怎么让整个div居中
  4. iOS开发支付篇——内购(IAP)详解
  5. 如何理解GMM模型及应用
  6. [附源码]java+ssm计算机毕业设计教师资格线上考试模拟系统gka9u(源码+程序+数据库+部署)
  7. 实验2:配置DHCPv6
  8. My Batis入门
  9. 框架源码 bootstrap html5 mysql oracle sqlsever
  10. windos10+ubuntu16.4安装历程(超级详细,解决识别不出未分配空间等问题)