QML之Canvas实现标尺(刻度尺)方案
环境: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实现标尺(刻度尺)方案相关推荐
- WebQML笔记-qml获取canvas中元素是否被按下
以前出了几个用QWebView,获取html前端数据的博文, 使用QWebElement可以直接获取html中元素的填充的值. 在此不在多提.这个是纯QML获取canvas中元素是否被按下的思路. 这 ...
- canvas绘制标尺
canvas绘制标尺 eg:[预览链接](https://jsfiddle.net/jaris/gz06j95p/) 发布时间: 2019-02-19 16:38:39 /*** canvas 绘制标 ...
- 前端基于Canvas生成等值面的方案
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 在之前的项目中,我们做过基于PM2.5的站点监测数据对全区域进 ...
- html页面标尺,canvas实现标尺.html
刻度尺 * { margin: 0; padding: 0; box-sizing: border-box; } .ruler-wrap { width: 100%; max-width: 600px ...
- Qt--canvas画图(5.12)
Qt--canvas画图(5.12) 1 介绍 2 使用流程 3 简单示例 3.1 简单线.图形.文本.渐变.尺子 3.2 选色绘画(转[参2]) 3.3 简单鼠标绘制(转[参2]) 3.4 绘制长方 ...
- QML <2> Canvas 自定义绘制 网易云歌单封面实现
QML <2> Canvas 自定义绘制 网易云歌单封面实现 前言 基于QML 实现 网易云歌单封面,参考图如下: 实现图如下: 一.背景图 最底层为Rectangle ,图片用Anima ...
- Canvas之translate、scale、rotate、skew
id="BAIDU_DUP_fp_iframe" src="https://pos.baidu.com/wh/o.htm?ltr=" style="w ...
- qml: C++调用qml函数
C++调用qml函数,是通过下面的函数实现的: bool QMetaObject::invokeMethod(QObject *obj, const char *member, Qt::Connect ...
- 基于canvas的视频遮罩插件
作者:云荒杯倾 作者博客 视频遮罩介绍 为一个视频添加一个覆盖物,从而挡住视频某区域,在视频的某一时间段,比如第10到第20分钟不显示划定的这块区域.应用场景包括遮挡卫视图标.遮挡视频右下角广告.充当 ...
最新文章
- 作为管理者的你,如何用人?一点建议给你
- 时间被空间和运动度量
- HashMap解决hash冲突的方法
- hive表级权限控制_Hive权限控制和超级管理员的实现
- 正则中需要转义的特殊字符小结
- 重温强化学习之无模型学习方法:TD(lambda)
- 如何从零开始搭建知识图谱?
- 推荐一款基于web的Unix系统管理工具webmin
- 第一单元总结:基于基础语言、继承和接口的简单OOP
- 16秋川大计算机基础作业,川大 16秋 《计算机应用基础》第一次作业答案
- 一文教会你认识Vuex状态机
- 每日小记2013.3.1
- 安卓端gis_微图手机版下载-微图(GIS软件工具)下载v2.1.7安卓版-西西软件下载
- 计算机旅游网站毕业论文,旅游网站的设计与实现(毕业论文)
- 动手实验:使用 jstat 摸清线上系统的JVM运行状况
- 风扇空调照明灯动画的创建
- 在刚创建的云服务器如何git克隆自己的私人仓库
- Welcome To Java!
- JDK下载安装及环境变量配置指南(Window系统)
- 一次服务器硬盘损坏修复记录贴(顺便把服务器硬件信息都搞清楚了)
热门文章
- 腾讯6大核心业务打造坚固护城河
- uni.uploadFile上传手机内部图片
- java好看的图形界面_java写出图形界面
- Qt实现Linux下的硬盘空间监测和文件清理
- LVGL8学习之row and a column layout with flexbox
- MacOS 打开软件出现xxx将对您的电脑造成伤害, 您应该将它移到废纸篓. 的解决方式.md
- 哲理故事与管理之道(22)-用竞争激励下属
- CSS组件_0 燕尾
- java堆内存设置_java堆内存设置原理
- java异常-绝对解决! The valid characters are defined in RFC 7230 and RFC 3986