QT quick基础:组件Canvas

参考《QT quick 核心编程》
使用qml画图。以下面的代码段为例,记录画图方法。

一、基本用法

Canvas {// 画布
        id:canvas;
        width: parent.width; // 画布宽度
        height: parent.height;// 画布高度
        
        onPaint: {
            var ctx = canvas.getContext("2d"); // 使用画布类型
            ctx.rect(0,0, 100,200);// 画一个矩形rect(x, y ,width ,height)
            ctx.lineWidth = 10;// 设置边框宽度
            ctx.strokeStyle = "red";// 设置边框颜色
            ctx.fillStyle = "blue"; // 设置填充颜色
            ctx.fill();// 画填充
            ctx.stroke();// 画边框
        }
    }

在这里插入图片描述
注意:
1、上述代码中获取画布类型可以使用Canvas的contextType属性。
2、上述代码中画图的顺序(ctx.fill(); ctx.stroke();这两句的顺序)不同,出来的效果不同。可能与图层有关系。

使用contextType 属性,获取画布类型,代码如下:

Canvas {
        id:canvas;
        width: parent.width;
        height: parent.height;
        contextType: "2d"

        onPaint: {
            context.rect(0,0, 200,100);// 画一个矩形rect(x, y ,width ,height)
            context.lineWidth = 10;// 设置边框宽度
            context.strokeStyle = "red";// 设置边框颜色
            context.fillStyle = "blue"; // 设置填充颜色
            context.fill();// 画填充
            context.stroke();// 画边框
        }
    }

在这里插入图片描述
二、绘制路径
步骤:

  1. 调用beginPath();
  2. 调用moveTo()、lineTo()等可以构造路径函数的方法。
  3. 调用fill()或stroke()方法。
 Canvas {
        id:canvas;
        width: parent.width;
        height: parent.height;
        contextType: "2d"

        onPaint: {
            context.beginPath();// 这句要再rect()这句前面,才能画出对应图形
            context.rect(0,0, 200,100);// 画一个矩形rect(x, y ,width ,height)
            context.lineWidth = 10;// 设置边框宽度

            var gradientFill = context.createLinearGradient(0,0,200,100);
            gradientFill.addColorStop(0.0,"yellow");
            gradientFill.addColorStop(1.0,"blue");
            context.fillStyle = gradientFill;
            context.fill();

            var gradient = context.createLinearGradient(0,0,200,100);
            gradient.addColorStop(0.0,"red");
            gradient.addColorStop(1.0,"green");
            context.strokeStyle = gradient;
            context.stroke();
        }
    }

在这里插入图片描述

Canvas {
        id:canvas;
        width: parent.width;
        height: parent.height;
        contextType: "2d"

        onPaint: {
            context.lineWidth = 50;
            context.beginPath();

            context.arc(300, 300, 100, 0, Math.PI,true);
            var gradient = context.createLinearGradient(200,300,400,300);
            gradient.addColorStop(0.0,"red");
            gradient.addColorStop(1.0,"green");
            context.strokeStyle = gradient;
            context.stroke();

            context.beginPath();
            context.arc(300, 300, 100, Math.PI, 2 * Math.PI,true);
            var gradient1 = context.createLinearGradient(400,300,200,300);
            gradient1.addColorStop(0.0,"green");
            gradient1.addColorStop(1.0,"yellow");
            context.strokeStyle = gradient1;
            context.stroke();
        }
    }

在这里插入图片描述

Canvas {
        id:canvas;
        width: parent.width;
        height: parent.height;
        contextType: "2d"

        onPaint: {
            context.lineWidth = 5;
            context.beginPath();
            context.strokeStyle = "blue";

            context.moveTo(100,100);
            context.lineTo(100,300);
            context.lineTo(200,300);
            context.closePath();// 结束当前路径,从路径终点到起点画一条直线来封闭路径

            context.stroke();

        }
    }

在这里插入图片描述
通过路径还可以绘制二次方贝塞尔曲线quadraticCurveTo,三次方贝塞尔曲线bezierCurveTo、弧线(arc、arcTo)、椭圆ellipse、文字text等。

绘制文字

Canvas {
        id:canvas;
        width: parent.width;
        height: parent.height;
        contextType: "2d"

        onPaint: {
            // 方式1
            context.beginPath();
            context.text("刘若英 后来",100,100);// 文字x,y位置
            context.stroke();

            // 方式2
            context.strokeText("刘若英 后来",100,100);// 文字x,y位置

        }
    }

在这里插入图片描述

Canvas {
        id:canvas;
        width: parent.width;
        height: parent.height;
        contextType: "2d"

        onPaint: {
            // 方式1
//            context.beginPath();
//            context.text("刘若英 后来",100,100);// 文字x,y位置
//            context.fill();

            // 方式2
            context.fillText("刘若英 后来1",100,100);// 文字x,y位置

        }
    }

在这里插入图片描述
绘制图片、变换、裁剪、图像合成。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/341452.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Scala基础知识

scala 1、scala简介 ​ scala是运行在JVM上的多范式编程语言,同时支持面向对象和面向函数式编程。 2、scala解释器 要启动scala解释器,只需要以下几步: 按住windows键 r输入scala即可 在scala命令提示窗口中执行:quit,即可退…

深度学习笔记(九)——tf模型导出保存、模型加载、常用模型导出tflite、权重量化、模型部署

文中程序以Tensorflow-2.6.0为例 部分概念包含笔者个人理解,如有遗漏或错误,欢迎评论或私信指正。 本篇博客主要是工具性介绍,可能由于软件版本问题导致的部分内容无法使用。 首先介绍tflite: TensorFlow Lite 是一组工具,可帮助开…

Java21 + SpringBoot3集成easy-captcha实现验证码显示和登录校验

文章目录 前言相关技术简介easy-captcha 实现步骤引入maven依赖定义实体类定义登录服务类定义登录控制器前端登录页面实现测试和验证 总结附录使用Session缓存验证码前端登录页面实现代码 前言 近日心血来潮想做一个开源项目,目标是做一款可以适配多端、功能完备的…

Android.mk和Android.bp的区别和转换详解

Android.mk和Android.bp的区别和转换详解 文章目录 Android.mk和Android.bp的区别和转换详解一、前言二、Android.mk和Android.bp的联系三、Android.mk和Android.bp的区别1、语法:2、灵活性:3、版本兼容性:4、向后兼容性:5、编译区…

鸿蒙开发笔记(二十三):图形展示 Image,Shape,Canvas

1. Image 在应用中显示图片需要使用Image组件实现,Image支持多种图片格式,包括png、jpg、bmp、svg和gif,具体用法请参考Image组件。 Image通过调用接口来创建,接口调用形式如下: Image(src: string | Resource | me…

力扣第92题——反转链表 II(C语言题解)

题目描述 给你单链表的头指针 head 和两个整数 left 和 right &#xff0c;其中 left < right 。请你反转从位置 left 到位置 right 的链表节点&#xff0c;返回 反转后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], left 2, right 4 输出&#xff1…

精品基于Uniapp+springboot智慧农业环境监测App

《[含文档PPT源码等]精品基于Uniappspringboot智慧农业环境监测App》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功&#xff01; 软件开发环境及开发工具&#xff1a; 开发语言&#xff1a;Java 后台框架&#xff1a;springboot、ssm …

Android双指缩放ScaleGestureDetector检测放大因子大图移动到双指中心点ImageView区域中心,Kotlin

Android双指缩放ScaleGestureDetector检测放大因子大图移动到双指中心点ImageView区域中心&#xff0c;Kotlin 在 Android双击图片放大移动图中双击点到ImageView区域中心&#xff0c;Kotlin-CSDN博客 基础上&#xff0c;这次使用ScaleGestureDetector检测两根手指的缩放动作&a…

一起玩儿物联网人工智能小车(ESP32)——44. 利用红外测距模块GP2Y0E03实现避障小车

摘要&#xff1a;本文介绍使用红外测距模块GP2Y0E03实现避障小车 在前边已经介绍了两种非接触测距的办法&#xff0c;分别是超声波测距和激光测距&#xff0c;在这里&#xff0c;再介绍另一种常用的测距传感器——红外测距传感器。红外测距的工作原理是&#xff0c;利用红外信号…

HuoCMS|免费开源可商用CMS建站系统HuoCMS 2.0下载(thinkphp内核)

HuoCMS是一套基于ThinkPhp6.0Vue 开发的一套HuoCMS建站系统。 HuoCMS是一套内容管理系统同时也是一套企业官网建设系统&#xff0c;能够帮过用户快速搭建自己的网站。可以满足企业站&#xff0c;外贸站&#xff0c;个人博客等一系列的建站需求。HuoCMS的优势: 可以使用统一后台…

数学建模--Radar图绘制

1.Radar图简介 最近在数学建模中碰见需要绘制Radar图(雷达图)的情况来具体分析样本的各个特征之间的得分与优劣关系&#xff0c;这样的情况比较符合雷达图的使用场景&#xff0c;一般来说&#xff0c;雷达图适用于展示多个维度的数据&#xff0c;并在一个平面上直观地呈现出不同…

前端每日一练 “文字穿透效果”

前言 我都不知道用什么样的词来描述这个效果&#xff0c;反正你看吧&#xff01;这个效果看上去很简单&#xff0c;但是一旦实现起来你会发现也不复杂&#xff0c;废话不多说直接上源码&#xff0c;喜欢的点个关注、留个免费的 html源码 <!DOCTYPE html> <html>&…

13.8.1异步、异步、异步 Page720~721

#include <iostream> #include <thread> #include <future>using namespace std;///定时炸弹第一波 void sync_sleep(int s) {cout << "sync_sleep----不使用异步" << endl;///启动定时this_thread::sleep_for(chrono::seconds(s)); /…

《WebKit 技术内幕》学习之十(2): 插件与JavaScript扩展

2 Chromium PPAPI插件 2.1 原理 插件其实是一种统称&#xff0c;表示一些动态库&#xff0c;这些动态库根据定义的一些标准接口可以跟浏览器进行交互&#xff0c;至于这个标准接口是什么都可以&#xff0c;重要的是大家都遵循它们&#xff0c;NPAPI接口标准只是其中的一种&a…

FastDFS分布式文件存储

为什么会有分布式文件系统&#xff1f; 分布式文件系统是面对互联网的需求而产生。因为互联网时代要对海量数据进行存储。很显然靠简单的增加硬盘个数已经满足不了我们的要求。因为硬盘传输速度有限但是数据在急剧增长&#xff0c;另外我们还要要做好数据备份、数据安全等。采用…

初识k8s(概述、原理、安装)

文章目录 概述由来主要功能 K8S架构架构图组件说明ClusterMasterNodekubectl 组件处理流程 K8S概念组成PodPod控制器ReplicationController&#xff08;副本控制器&#xff09;ReplicaSet &#xff08;副本集&#xff09;DeploymentStatefulSet &#xff08;有状态副本集&#…

6 时间序列(不同位置的装置如何建模): GRU+Embedding

很多算法比赛经常会遇到不同的物体产生同含义的时间序列信息&#xff0c;比如不同位置的时间序列信息&#xff0c;风力发电、充电桩用电。经常会遇到该如此场景&#xff0c;对所有数据做统一处理喂给模型&#xff0c;模型很难学到区分信息&#xff0c;因此设计如果对不同位置的…

【Linux】常见指令(一)

前言: Linux有许多的指令&#xff0c;通过学习这些指令&#xff0c;可以对目录及文件进行操作。 文章目录 一、基础指令1. ls—列出目录内容2. pwd—显示当前目录3. cd—切换目录重新认识指令4. touch—创建文件等5. mkdir—创建目录6. rmdir指令 && rm 指令7. man—显…

linux源码编译安装llvm

目录 1 建立文件夹llvm 2 下载源码到llvm文件夹 3 解压上述文件 4 将解压后的3个文件夹改名&#xff0c;并移动到llvm-9.0.0.src中&#xff1a; 5 在llvm文件夹内建立build文件夹&#xff0c;并进入该文件夹&#xff1a; 6 执行cmake命令 7 make 8 安装 9 安装成功后…

[晓理紫]每日论文分享(有中文摘要,源码或项目地址)--机器人、强化学习

专属领域论文订阅 VX 扫吗关注{晓理紫|小李子}&#xff0c;每日更新论文&#xff0c;如感兴趣&#xff0c;请转发给有需要的同学&#xff0c;谢谢支持 如果你感觉对你有帮助可以扫吗关注&#xff0c;每日准时为你推送最新论文 分类: 大语言模型LLM视觉模型VLM扩散模型视觉导航…