这个示例演示了一个简单的自定义仪表盘组件。

import QtQuick 2.2
import QtQuick.Window 2.1Rectangle
{color: "#545454"width: 300; height: 300Dial    //自定义仪表盘{id: dialanchors.centerIn: parentvalue: slider.x * 100 / (container.width - 32)}//滑块的滑道Rectangle{id: containerproperty int oldWidth: 0anchors{bottom: parent.bottom; left: parent.leftright: parent.right; leftMargin: 20; rightMargin: 20bottomMargin: 10}height: 16radius: 8opacity: 0.7antialiasing: truegradient: Gradient{GradientStop { position: 0.0; color: "gray" }GradientStop { position: 1.0; color: "white" }}onWidthChanged:{if (oldWidth === 0){oldWidth = width;return}var desiredPercent = slider.x * 100 / (oldWidth - 32)slider.x = desiredPercent * (width - 32) / 100oldWidth = width}//滑块Rectangle{id: sliderx: 1; y: 1; width: 30; height: 14radius: 6antialiasing: truegradient: Gradient{GradientStop { position: 0.0; color: "#424242" }GradientStop { position: 1.0; color: "black" }}MouseArea{anchors.fill: parentanchors.margins: -16drag.target: parent; drag.axis: Drag.XAxisdrag.minimumX: 2; drag.maximumX: container.width - 32}}}//退出按钮QuitButton{anchors.right: parent.rightanchors.top: parent.topanchors.margins: 10}
}

主界面比较简单,上面是一个自定义的仪表盘控件,下面是一个自定义的滑道,滑道内部有个滑块,通过滑块的鼠标拖到改变滑块的水平方向。

仪表盘:

import QtQuick 2.0Item
{id: rootproperty real value : 0width: 210; height: 210Image{anchors.fill: parentsource: "background.png"}//表盘指针Image{id: needlex: 98; y: 33antialiasing: truesource: "needle.png"transform: Rotation{id: needleRotationorigin.x: 5; origin.y: 65   //旋转的原点angle: Math.min(Math.max(-130, root.value*2.6 - 130), 133)Behavior on angle{SpringAnimation{spring: 1.4 //被拉向源的强度damping: 0.15//弹簧阻尼值}}onAngleChanged:console.log(needleRotation.angle)}}//表盘指针的阴影Image{x: 96y: 35source: "needle_shadow.png"transform: Rotation{origin.x: 9; origin.y: 67angle: needleRotation.angle}}//中心的罩子Image { x: 21; y: 18; source: "overlay.png" }
}

首先是铺上一层背景图片:

然后铺上指针图片和阴影图片:

最后铺上一层罩子,罩子上贷了一层反光:

仪表盘的自定义属性 value 和滑块的水平位置绑定了,指针图片组件的旋转角度又和 value 的值绑定了,拖到滑块则指针的旋转角度变化。

退出按钮也是图片组件:

import QtQuick 2.0
Image
{source: "quit.png"scale: quitMouse.pressed ? 0.8 : 1.0MouseArea{id: quitMouseanchors.fill: parentanchors.margins: -10onClicked: Qt.quit()}
}

示例中的小技巧:

1、MouseArea 中设置:

anchors.margins: -16

让鼠标区域的范围比滑块看起来的范围大一些,这是个提升易用性的小细节。

2、鼠标区域通过拖动组的属性来使滑块移到比使用鼠标事件让滑块移到更简便、代码更少。让我写估计第一时间想到的就是用鼠标事件实现

Qt官方示例:UI Components: Dial Control Example相关推荐

  1. Qt 官方示例 | 这几个 QML 版的 Hello World 你学会了吗?

    .我是老吴,一枚光荣的嵌入式底层劳动人民. 作为一名 C++ 手残党的我,又来分享 Qt 的学习心得啦. 学习 Qt 的最佳途径是阅读官方的手册和示例, 今天要分享的是 Qt 官方提供的几个 Qt Q ...

  2. Qt官方示例:UI Components: Scroll Bar Example(自定义滚动条)

    此示例演示了一个自定义滚动条的方法. 自定义滚动条: import QtQuick 2.0Item {id: scrollBarproperty real position//范围是 0.0 - 1. ...

  3. Qt官方示例-QLineEdit编辑器

    基于QLineEdit而写的文本单行编辑器.   上手使用了该编辑器示例,并归纳出以下主要功能分享给大家. 回显模式   根据不同的场合显示字符的不同显示模式,比较常用的模式有密码模式. 使用接口: ...

  4. Qt官方示例-正则测试工具

    该正则测试工具(regularexpression)是基于Qt 5.0新引入的QRegularExpression类实现的.   QRegularExpression实现与Perl兼容的正则表达式,支 ...

  5. Qt官方示例-虚拟键盘使用

    这是一个使用Qt虚拟键盘的QML文本输入示例.   该示例提供两种使用方式:一种用于桌面平台,另一种用于嵌入式平台,本例采用嵌入式平台方式显示.它们区别是前者脱离窗口应用于全局,后者依附于窗口. di ...

  6. Qt官方示例-计算器

    该示例显示了如何使用信号和槽来实现计算器小部件的功能,以及如何使用QGridLayout将子小部件放置在网格中. 通过绑定不同的按钮和不同的槽函数实现计算功能. private slots:void ...

  7. Qt官方示例-速度仪表盘

    该刻度盘控件为一个速度仪表盘. 预览 运行演示 分析 采用Qml语言实现: 使用到了图片素材(刻度盘,指示器,指示器阴影,覆盖层): 它结合了Image元素,Rotation变换和SpringAnim ...

  8. Qt官方示例-数字时钟

    基于QLCDNumber实现的LCD的时钟显示.   DigitalClock继承于QLCDNumber,并实现一个槽函数showTime()用来定时更新时钟显示: class DigitalCloc ...

  9. Qt官方示例-拖动图标

    拖动图标示例显示了如何在同一应用程序中的小部件之间以及不同应用程序之间拖放图像数据.   在使用拖放的许多情况下,用户开始从特定的窗口小部件拖放,并将有效负载拖放到另一个窗口小部件上.在此示例中,我们 ...

最新文章

  1. 高压放电与防静电塑料包装
  2. python怎么安装matplotlib-为python安装matplotlib模块
  3. jeasyui控件事件和方法的使用方法
  4. 005_JavaScript使用
  5. GridView导出到Excel或Word文件
  6. java调用python项目实战_Java调用Python
  7. 优先级队列,代码参考范例
  8. 最大素因子(不是题目!自己写着玩的。。。)
  9. eclipse--基本配置
  10. linux TUN 虚拟网卡设备
  11. Ubunt更换阿里云镜像源
  12. S32K144 S32K148 UDS诊断 BOOTLOADER开发 ISO14229 15765 软件定 基于UDS协议的CAN总线Bootloader设计 具体价格以咨询为主 UDS 诊断
  13. 使用easypoi导出excel设置表头样式
  14. The file contains a character that cannot be represented in the current code page.c1070
  15. pe如何格式化Linux硬盘,linux格式化硬盘
  16. c语言程序设计试题汇编第三版勘误,c语言程序设计基础教程----勘误记录.pdf
  17. 分享灵动MM32L052PF替代STM32F042C6T6
  18. EBA 启动问题解决方法
  19. CMOS与TTL(上)
  20. JS实现简单的手电筒的开关灯的效果

热门文章

  1. java调用企业微信接口发送文件功能
  2. 【云原生 | 02】分别在CentOS、Ubuntu、macOS、win7、win8、win10等不同操作系统下安装Docker详细教程
  3. jquery 获取某个值得键名_js:数组里面获取键名和键值
  4. 【有奖互动】3D内容平台开版啦,参与互动话题赢超值京东卡!
  5. linux 企业版系统安装教程,红帽企业版Linux 6安装指南(中文)
  6. python判断用户名是否合法_Python校验用户名是否合法示例
  7. 结构体熟练掌握--实现通讯录
  8. 发现属于你的大数据“矿脉”
  9. 我爱天文 - 你有星空摄影的知识吗?
  10. hmacsha256 java_java实现HMACSHA256加密签名