当前位置: 首页 > news >正文

网站编程培训学校有哪些仿古建筑工程网

网站编程培训学校有哪些,仿古建筑工程网,网站备案更改,湛江vi设计公司目录 简介 相关阅读 实现效果展示 实现步骤 1. 定义属性 2. Dial控件基本配置 3. 使用Canvas绘制刻度 3.1 主刻度绘制 3.2 刻度标签 3.3 子刻度绘制 3.4 当前值指示器 4. 中心值显示 运行效果 总结 完整工程下载 简介 Dial(表盘)控件是Q…

目录

简介

相关阅读

实现效果展示

实现步骤

1. 定义属性

2. Dial控件基本配置

3. 使用Canvas绘制刻度

3.1 主刻度绘制

3.2 刻度标签

3.3 子刻度绘制

3.4 当前值指示器

4. 中心值显示

运行效果

总结

完整工程下载


简介

Dial(表盘)控件是QML中一个常用的输入组件,类似于旋钮或圆形滑块。本文将介绍如何通过自定义绘制来创建一个带有刻度、标签和中心值显示的精美Dial控件。

相关阅读

Dial QML Type | Qt Quick Controls 6.8.3

Canvas QML Type | Qt Quick 6.8.3

QML输入控件:Dial联动、音频均衡器的实现 (3)-CSDN博客

实现效果展示

实现步骤

接下来要实现一个QML示例,创建一个带有自定义刻度的旋钮(Dial)控件。它展示了如何使用 QML 的 Canvas 组件来绘制自定义的图形和文本,并结合 Dial 控件来实现一个动态的仪表盘效果。以下是详细的实现步骤:

1. 定义属性

首先,我们定义了一些全局属性来控制Dial的外观:

property color tickColor: "#606060"        // 刻度颜色
property color activeTickColor: "#e74c3c"  // 当前值指示器颜色
property int tickCount: 12                 // 主刻度数量
property int subTickCount: 4              // 每个主刻度之间的子刻度数量
property double startAngle: -140          // 起始角度
property double endAngle: 140             // 结束角度
  • tickColor:主刻度的颜色,默认为深灰色。
  • activeTickColor:当前值指示器的颜色,默认为红色。
  • tickCount:主刻度的数量,默认为 12。
  • subTickCount:每个主刻度之间的子刻度数量,默认为 4。
  • startAngle 和 endAngle:定义了旋钮的起始角度和结束角度,单位为度。这里设置为从 -140 度到 140 度,总共覆盖 280 度。 

2. Dial控件基本配置

Dial {id: dialanchors.centerIn: parentwidth: Math.min(parent.width, parent.height) * 0.8height: widthfrom: 0to: 100value: 50stepSize: 1handle: null  // 隐藏默认手柄
}

这里设置了Dial的基本属性,包括尺寸、值范围和步进值。通过将handle设为null来隐藏默认的手柄显示。

  • from: 0 和 to: 100:定义了 Dial 控件的值范围,从 0 到 100。
  • value: 50:初始值为 50。
  • stepSize: 1:每次旋转的步长为 1。

3. 使用Canvas绘制刻度

在background属性中使用Canvas来自定义绘制刻度:

background: Canvas {id: dialCanvasanchors.fill: parentrotation: -90onPaint: {var ctx = getContext("2d")ctx.reset()const centerX = width / 2const centerY = height / 2const outerRadius = width / 2 - 10const innerRadius = outerRadius - 15const subInnerRadius = outerRadius - 8
  • Canvas:用于绘制自定义图形。
  • rotation: -90:将 Canvas 旋转 -90 度,使角度计算更直观(从顶部开始绘制)。 
  • onPaint:Canvas 的绘制事件,当需要重新绘制时触发。
  • getContext("2d"):获取 2D 绘图上下文。
  • ctx.reset():清除之前的绘制内容。
  • 定义了绘制时使用的中心点、外半径、内半径和子刻度内半径。
3.1 主刻度绘制
// 绘制主刻度
ctx.strokeStyle = tickColor
ctx.lineWidth = 1.5
for (var i = 0; i <= tickCount; i++) {var angle = (startAngle + (endAngle - startAngle) * (i / tickCount)) * Math.PI / 180ctx.beginPath()ctx.moveTo(centerX + innerRadius * Math.cos(angle),centerY + innerRadius * Math.sin(angle))ctx.lineTo(centerX + outerRadius * Math.cos(angle),centerY + outerRadius * Math.sin(angle))ctx.stroke()// 绘制刻度标签 ...
}

使用循环绘制主刻度线,并在每个刻度位置计算角度。

3.2 刻度标签
// 绘制刻度标签
ctx.fillStyle = tickColor
ctx.font = '12px sans-serif'
ctx.textAlign = "center"
ctx.textBaseline = "middle"
var labelRadius = outerRadius - 25
var labelValue = dial.from + (dial.to - dial.from) * (i / tickCount)ctx.save()
ctx.translate(centerX + labelRadius * Math.cos(angle),centerY + labelRadius * Math.sin(angle)
)
ctx.rotate(angle + Math.PI/2)
ctx.fillText(labelValue.toFixed(0), 0, 0)
ctx.restore()

 为每个主刻度添加对应的数值标签。使用save()和restore()来保证文本旋转不影响其他绘制操作。

3.3 子刻度绘制
// 绘制子刻度
if (subTickCount > 0) {ctx.lineWidth = 1for (i = 0; i <= tickCount * subTickCount; i++) {angle = (startAngle + (endAngle - startAngle) * (i / (tickCount * subTickCount))) * Math.PI / 180if (i % subTickCount === 0) continuectx.beginPath()ctx.moveTo(centerX + subInnerRadius * Math.cos(angle),centerY + subInnerRadius * Math.sin(angle))ctx.lineTo(centerX + outerRadius * Math.cos(angle),centerY + outerRadius * Math.sin(angle))ctx.stroke()}
}

在主刻度之间添加更细、更短的子刻度,提升精确度。

3.4 当前值指示器
// 高亮当前值刻度(改为更细的指示线)
var activeAngle = dial.angle * Math.PI / 180
ctx.strokeStyle = activeTickColor
ctx.lineWidth = 2
ctx.beginPath()
ctx.moveTo(centerX + (innerRadius-10) * Math.cos(activeAngle),centerY + (innerRadius-10) * Math.sin(activeAngle)
)
ctx.lineTo(centerX + outerRadius * Math.cos(activeAngle),centerY + outerRadius * Math.sin(activeAngle)
)
ctx.stroke()

使用不同颜色和粗细的线条来显示当前值的位置。

4. 中心值显示

// 中心值显示(带背景提升可读性)
Rectangle {anchors.centerIn: parentwidth: valueLabel.width + 20height: valueLabel.height + 10radius: 5color: "#f0f0f0"border.color: "#c0c0c0"Label {id: valueLabelanchors.centerIn: parenttext: dial.value.toFixed(1)font.pixelSize: 24color: activeTickColor}
}

在Dial中心添加一个带背景的数值显示,实时显示当前值。

运行效果

控件呈现为圆形旋钮形态:

  • 12个主刻度带数字标签(0-100),每个主刻度间包含4个子刻度
  • 红色指示线实时反映当前数值,支持鼠标拖拽和精准数值调整
  • 中心区域显示精确到小数点后一位的当前值

 

总结

本文实现了一个功能完善的刻度旋钮控件,实现要点包括:

  • 合理运用Canvas进行复杂图形绘制
  • 数学计算实现精确的刻度定位
  • 属性绑定实现数据驱动视图

完整工程下载

https://gitcode.com/u011186532/qml_demo/tree/main/qml_dial

http://www.dtcms.com/a/571580.html

相关文章:

  • 二级网站的建设方案做变形记图网站
  • 其它区便宜营销型网站建设昆山网站建设熊掌号
  • 都匀住房和城乡建设厅网站网站模版html
  • 做公益网站建设集团网站的作用
  • 网页网站设计东莞本地招聘网站有哪些
  • 建设档案员证书查询网站蓝色中网站
  • 连云港网站建设电话seo案例网站建设哪家好
  • 如何建立公司网站模块品牌运营策划
  • 网站移动端怎么做.net网站
  • 信息技术网站建设教案如何做网站不被查
  • 网站诊断与优化的作用郑州企业管理培训课程
  • 常州公诚建设项目管理有限公司官方网站怎么找客户的联系方式
  • 做铝锭的网站手机怎么打开自己做的网站
  • 公司做网站流程wordpress word发布文章
  • 设计电子商务网站方式网站备案拍照点
  • 做网站苏州自己怎么做dj 视频网站
  • 国内大的网站建设公司排名crm软件免费
  • 专业专业的网站开发代理平台哪个好
  • 无锡网站制作电话多少wordpress ssl 500
  • 网站建设功能定位丹东seo优化效果费用
  • 网站界面ui设计国家开放大学答案网站建设新手教程视频
  • 西安seo网站关键词广西专业做网站的公司
  • 珠海建网站价格百度seo快速
  • 开源系统网站网站服务器位置查询
  • 做企业网站步骤制作外贸网站模板下载
  • 注册网站查询系统厦门手机网站建设是什么意思
  • 表白网站怎么做wordpress go链接不跳转
  • 旅游网站制作文献seo排名优化软件价格
  • 公园网站建设方案wordpress 提权攻击
  • 如何做行业网站有创意的电商公司名字大全