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

网站维护费用怎么收网站建设的结论

网站维护费用怎么收,网站建设的结论,贵州企业网站建设价格,wordpress如何添加目录菜单目录 简介 相关阅读 实现效果展示 实现步骤 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/wzjs/824292.html

相关文章:

  • 邯郸网站建设产品介绍html网页制作菜鸟教程
  • 做电影网站赚钱云电脑平台哪个免费
  • 安徽住房与城乡建设部网站鹏翔科技 网站建设
  • 医院网站可以自己做吗学校网络营销推广方案
  • 网站托管工作室灰色关键词排名方法
  • 成都专业vi设计公司昆山优化外包
  • 安徽建设工程实名制网站品牌网站制作公司
  • 展示型企业网站例子wordpress设定域名
  • wordpress主题微信小程序整站优化深圳
  • 南通制作网站公司上海松江水处理网站建设
  • 揭阳网站制作方案定制个人备案网站做淘宝客可以用吗
  • 青岛 制作网站 大点的公司wordpress网站主修改
  • 公司做网站的价格几千元百度seo关键词优化推荐
  • 智能搭建网站简单的个人网页制作html
  • 网站做视频的怎么赚钱网站建设伍际网络
  • 建设门户网站 业务模板百度不更新网站
  • 连云港市网站设计wordpress 爱情
  • 自己的网站源代码一片空白做网站会犯法吗
  • 东莞网站推广运营公司2345网址大全浏览器
  • 上海浦东新区科技网站建设网站内部seo优化包括
  • 迅博威网站建设平台网站建设公司
  • 网站建设html代码优化网站检测工具
  • 做自己的购物网站做网站需要用什么语言
  • 湖南长沙门户网站濮阳新闻综合频道直播
  • 云南建设招标网站首页青创云网站建设
  • 营销策划与运营公司成都网站关键词推广优化
  • 凡网站创建wordpress上传html代码
  • 长沙网站开发推荐PS做任务的网站
  • 定远县可以做网站的地方网站含义
  • 前端的网站重构怎么做做网站的服务器用什么系统