环境:Qt5.12.1,MinGW

主要代码如下:

import QtQuick 2.0
import QtQuick.Controls 2.12Canvas{z:5id: canvas_rulerwidth: parent.widthheight: parent.heightonPaint: {var ctx = getContext("2d");draw(ctx)}}function draw(ctx ) {var config={width: canvas_ruler.width-rulerWidth,height: canvas_ruler.height-rulerWidth,// 刻度尺相关size: 600, // 刻度尺总刻度数x: 10, // 刻度尺x坐标位置y: rulerWidth, // 刻度尺y坐标位置w: 5, // 刻度线的间隔h: 10 // 刻度线基础长度}var size = (config.size || 100) * 10 + 1var x = rulerWidthvar y = rulerWidth-1var w = config.w || 5var h = config.h || 10var offset = 3 // 上面数字的偏移量// 画之前清空画布ctx.clearRect(0, 0, config.width, config.height)ctx.fillStyle ="#F5DEB3"ctx.fillRect(0, x,rulerWidth, config.height);ctx.fillRect(x,0 , config.width,rulerWidth);ctx.fillStyle ="#111"    // 设置画笔属性ctx.strokeStyle = '#333'ctx.lineWidth = 1
//      ctx.font = 13for (var i = 0; i < size; i++) {  //画水平ctx.beginPath()          // 开始一条路径// 移动到指定位置ctx.moveTo(x + i * w, y)// 满10刻度时刻度线长一些 并且在上方表明刻度if (i % 10 == 0) {// 计算偏移量offset = (String(i / 10).length * 6 / 2)ctx.fillText(i / 10,x + i * w - offset+10 , y - h * 1.2);ctx.lineTo(x + i * w, y - h * 2)} else {// 满5刻度时的刻度线略长于1刻度的ctx.lineTo(x + i * w, y - (i % 5 === 0 ? 1 : 0.6) * h)}// 画出路径ctx.stroke()}for ( i = 0; i < size; i++) {  //画垂直ctx.beginPath()          // 开始一条路径// 移动到指定位置ctx.moveTo(y,x + i * w)// 满10刻度时刻度线长一些 并且在上方表明刻度if (i % 10 == 0) {// 计算偏移量offset = (String(i / 10).length * 6 / 2)ctx.lineTo( y - h * 2,x + i * w,)ctx.fillText(i / 10, y - h * 1.2-5,x + i * w - offset+15 );} else {// 满5刻度时的刻度线略长于1刻度的ctx.lineTo(y - (i % 5 === 0 ? 1 : 0.6) * h,x + i * w)}// 画出路径ctx.stroke()}}

效果图:

下载链接:https://download.csdn.net/download/alongsxmx/11421289

QML之Canvas实现标尺(刻度尺)方案相关推荐

  1. WebQML笔记-qml获取canvas中元素是否被按下

    以前出了几个用QWebView,获取html前端数据的博文, 使用QWebElement可以直接获取html中元素的填充的值. 在此不在多提.这个是纯QML获取canvas中元素是否被按下的思路. 这 ...

  2. canvas绘制标尺

    canvas绘制标尺 eg:[预览链接](https://jsfiddle.net/jaris/gz06j95p/) 发布时间: 2019-02-19 16:38:39 /*** canvas 绘制标 ...

  3. 前端基于Canvas生成等值面的方案

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 在之前的项目中,我们做过基于PM2.5的站点监测数据对全区域进 ...

  4. html页面标尺,canvas实现标尺.html

    刻度尺 * { margin: 0; padding: 0; box-sizing: border-box; } .ruler-wrap { width: 100%; max-width: 600px ...

  5. Qt--canvas画图(5.12)

    Qt--canvas画图(5.12) 1 介绍 2 使用流程 3 简单示例 3.1 简单线.图形.文本.渐变.尺子 3.2 选色绘画(转[参2]) 3.3 简单鼠标绘制(转[参2]) 3.4 绘制长方 ...

  6. QML <2> Canvas 自定义绘制 网易云歌单封面实现

    QML <2> Canvas 自定义绘制 网易云歌单封面实现 前言 基于QML 实现 网易云歌单封面,参考图如下: 实现图如下: 一.背景图 最底层为Rectangle ,图片用Anima ...

  7. Canvas之translate、scale、rotate、skew

    id="BAIDU_DUP_fp_iframe" src="https://pos.baidu.com/wh/o.htm?ltr=" style="w ...

  8. qml: C++调用qml函数

    C++调用qml函数,是通过下面的函数实现的: bool QMetaObject::invokeMethod(QObject *obj, const char *member, Qt::Connect ...

  9. 基于canvas的视频遮罩插件

    作者:云荒杯倾 作者博客 视频遮罩介绍 为一个视频添加一个覆盖物,从而挡住视频某区域,在视频的某一时间段,比如第10到第20分钟不显示划定的这块区域.应用场景包括遮挡卫视图标.遮挡视频右下角广告.充当 ...

最新文章

  1. 作为管理者的你,如何用人?一点建议给你
  2. 时间被空间和运动度量
  3. HashMap解决hash冲突的方法
  4. hive表级权限控制_Hive权限控制和超级管理员的实现
  5. 正则中需要转义的特殊字符小结
  6. 重温强化学习之无模型学习方法:TD(lambda)
  7. 如何从零开始搭建知识图谱?
  8. 推荐一款基于web的Unix系统管理工具webmin
  9. 第一单元总结:基于基础语言、继承和接口的简单OOP
  10. 16秋川大计算机基础作业,川大 16秋 《计算机应用基础》第一次作业答案
  11. 一文教会你认识Vuex状态机
  12. 每日小记2013.3.1
  13. 安卓端gis_微图手机版下载-微图(GIS软件工具)下载v2.1.7安卓版-西西软件下载
  14. 计算机旅游网站毕业论文,旅游网站的设计与实现(毕业论文)
  15. 动手实验:使用 jstat 摸清线上系统的JVM运行状况
  16. 风扇空调照明灯动画的创建
  17. 在刚创建的云服务器如何git克隆自己的私人仓库
  18. Welcome To Java!
  19. JDK下载安装及环境变量配置指南(Window系统)
  20. 一次服务器硬盘损坏修复记录贴(顺便把服务器硬件信息都搞清楚了)

热门文章

  1. 腾讯6大核心业务打造坚固护城河
  2. uni.uploadFile上传手机内部图片
  3. java好看的图形界面_java写出图形界面
  4. Qt实现Linux下的硬盘空间监测和文件清理
  5. LVGL8学习之row and a column layout with flexbox
  6. MacOS 打开软件出现xxx将对您的电脑造成伤害, 您应该将它移到废纸篓. 的解决方式.md
  7. 哲理故事与管理之道(22)-用竞争激励下属
  8. CSS组件_0 燕尾
  9. java堆内存设置_java堆内存设置原理
  10. java异常-绝对解决! The valid characters are defined in RFC 7230 and RFC 3986