qt5-入门-2D绘图-基础

news2024/11/24 6:20:24

参考:
QPainter_w3cschool
https://www.w3cschool.cn/learnroadqt/k7zd1j4l.html

C++ GUI Programming with Qt 4, Second Edition

本地环境:
win10专业版,64位,Qt 5.12

代码已经测试通过。其他例子日后更新。


目录

  • 基础知识
    • pen
    • brush
    • 其他属性
  • 实例
    • 简单例子
    • Bezier曲线
    • 点击事件

基础知识

  • QPainter通过QPaintEngineQPainterDevice上进行绘制。如果希望使用OpenGL功能,应该使用QtOpenGL模块。
  • painter主要涉及三个设置:pen brush和font。font是用来写文字的,有字体和大小等属性。这些属性可以用QPenQBrushQFont对象调用setPen()setBrush()setFont()来设置。
  • 任何时候都可以使用save()将painter当前的状态保存到内部栈上,等需要恢复的时候使用restore()恢复。
  • QPainter是状态机,如果做了设置,只会影响设置之后的,直到下一次再设置才会改变,类似OpenGL。

pen

QPen是用来画线条和轮廓线的,包含的属性有颜色、线宽、line style、cap style、join style,后三个的含义见下图。
在这里插入图片描述

brush

brush指的是填充模式,包含的属性是颜色和样式。也可以是纹理(texture,a pixmap that is repeated infinitely)或者渐变(gradient)。
在这里插入图片描述
gradient
在这里插入图片描述

其他属性

  • brush下面的叫background,默认都是Qt::TransparentMode,如果改成Qt::OpaqueMode的话,可以设置background brush
  • brush的原点一般在左上角
  • clip 区域是可以绘图的区域,超过的部分不会显示

实例

简单例子

在这里插入图片描述

#ifndef PAINTEDWIDGET_H
#define PAINTEDWIDGET_H

#include <QWidget>
#include <QPainter>

class PaintedWidget : public QWidget
{
public:
    PaintedWidget() {
        resize(800, 600);
        setWindowTitle(tr("Paint Demo"));
    }

protected:
    void paintEvent(QPaintEvent *event) {
        QPainter painter(this);
        // QPainter::Antialiasing是一个渲染提示类型,表示启用抗锯齿功能,使得绘制的边缘更加平滑
        // 看起来更加自然和清晰。当将第二个参数设置为true时,即表示启用了抗锯齿功能。
        painter.setRenderHint(QPainter::Antialiasing, true);
        painter.setPen(QPen(Qt::black, 12, Qt::DashDotLine, Qt::RoundCap));
        painter.setBrush(QBrush(Qt::green, Qt::SolidPattern));
        // x, y, width, height
        painter.drawEllipse(80, 80, 400, 240);
    }
};

#endif // PAINTEDWIDGET_H


// main
PaintedWidget* p = new PaintedWidget;
p->show();

Bezier曲线

在这里插入图片描述

    void paintEvent(QPaintEvent *event) {
        QPainter painter(this);
        painter.setRenderHint(QPainter::Antialiasing, true);
        QPainterPath path;
        // 移动到起点
        path.moveTo(80, 320); 
        // 分别是第一个、第二个控制点和终点的坐标
        path.cubicTo(200, 80, 320, 80, 480, 320);
        painter.setPen(QPen(Qt::black, 8));
        painter.drawPath(path);
    }

点击事件

修改类,增加:

protected:
    void mousePressEvent(QMouseEvent *event) override;

signals:
    void clicked();

实现:

void PaintedWidget::mousePressEvent(QMouseEvent *event) {
    emit clicked();
}

在使用的时候需要绑定槽函数:

// p 是 PaintedWidget类的对象
connect(p, &PaintedWidget::clicked, this, &MainWindow::drawImages);

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微信小程序个人中心、我的界面(示例四)

微信小程序个人中心、我的界面&#xff0c;九宫格简单布局&#xff08;示例四&#xff09; 微信小程序个人中心、我的界面&#xff0c;超简洁的九宫格界面布局&#xff0c;代码粘贴即用。更多微信小程序界面示例&#xff0c;请进入我的主页哦&#xff01; 1、js代码 Page({…

gateway全局token过滤器

添加gateway依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency>创建一个tokenFilter 实现全局过滤器GlobalFilter,并且实现fitler方法 Value("${…

PDF高效编辑器,支持修改PDF文档并转换格式从PDF文件转换成图片文件,轻松管理你的文档世界!

PDF文件已成为我们工作、学习和生活中不可或缺的一部分。然而&#xff0c;传统的PDF阅读器往往只能满足简单的查看需求&#xff0c;对于需要频繁编辑、修改或转换格式的用户来说&#xff0c;就显得力不从心。现在&#xff0c;我们为您带来一款全新的PDF高效编辑器&#xff0c;让…

Vue 组件单元测试深度探索:细致解析与实战范例大全

Vue.js作为一款广受欢迎的前端框架&#xff0c;以其声明式的数据绑定、组件化开发和灵活的生态系统赢得了广大开发者的心。然而&#xff0c;随着项目规模的增长&#xff0c;确保组件的稳定性和可靠性变得愈发关键。单元测试作为软件质量的守护神&#xff0c;为Vue组件的开发过程…

开源AI智能名片商城小程序:深度解读IMC(IP、MarTech、Content)视角

在数字化浪潮中&#xff0c;私域流量的运营已成为企业不可或缺的增长引擎。而开源AI智能名片商城小程序&#xff0c;则是以一种全新的视角——IMC&#xff08;IP、MarTech、Content&#xff09;&#xff0c;为企业打开私域流量运营的新篇章。今天&#xff0c;我们就来一起深入解…

mac安装软件遇到无法验证开发者的解决方法

现象 无法打开“”&#xff0c;因为无法验证开发者。这种情况说明正在安装的软件里面有的包被系统判定为不安全的。 解决方法 1、点击取消按钮 2、系统设置-隐私与安全性&#xff0c;点击打开按钮

python可视化图表

1.测试数据准备 2011年1月销售数据.txt 2011-01-01,4b34218c-9f37-4e66-b33e-327ecd5fb897,1689,湖南省 2011-01-01,5b6a6417-9a16-4243-9704-255719074bff,2353,河北省 2011-01-01,ae240260-68a9-4e59-b4c9-206be4c08a8d,2565,湖北省 2011-01-02,c833e851-880f-4e05-9de5-b5…

第6篇:创建Nios II工程之控制LED<一>

Q&#xff1a;还记得第1篇吗&#xff1f;设计简单的逻辑电路&#xff0c;控制DE2-115开发板上LED的亮与熄灭&#xff0c;一行Verilog HDL的assign赋值语句即可实现。本期开始创建Nios II工程&#xff0c;用C语言代码控制DE2-115开发板上的LED实现流水灯效果。 A&#xff1a;在…

力扣141.环形链表142.环形链表Ⅱ 附证明

题目链接&#xff1a; 141. 环形链表 - 力扣&#xff08;LeetCode&#xff09; 142. 环形链表 II - 力扣&#xff08;LeetCode&#xff09; 141.环形链表 方法思路&#xff1a;快慢指针 代码: class Solution { public:bool hasCycle(ListNode *head) {if(!head){return fa…

基于uniapp vue3.0 uView 做一个点单页面(包括加入购物车动画和左右联动)

1、实现效果&#xff1a; 下拉有自定义组件&#xff08;商品卡片、进步器、侧边栏等&#xff09;源码 2、左右联动功能 使用scroll-view来做右边的菜单页&#xff0c;title的id动态绑定充当锚点 <scroll-view :scroll-into-view"toView" scroll-with-animation…

vue+element之解决upload组件上传文件失败后仍显示在列表上、自动上传、过滤、findIndex、splice、filter

MENU 前言错误案例(没有用)正确方法结束语 前言 el-upload上传失败后&#xff0c;文件仍显示在列表上。 这个pdf文件上传失败&#xff0c;仍显示在列表&#xff0c;给人错觉是上传成功&#xff0c;所以要把它去掉。 在element中&#xff0c;file-list和v-model:file-list是用于…

Codigger数据篇(中):数据可控性的灵活配置

在数据服务领域中&#xff0c;数据可控性无疑是至关重要的一环。数据可控性不仅关乎数据的安全性和隐私性&#xff0c;更直接影响到数据价值的实现。Codigger&#xff0c;在其数据可控性方面的灵活配置&#xff0c;为用户提供了更加便捷、高效的数据管理体验。 一、自主选择数…

拌合楼管理系统(十八)如何从一个winForm中的事件修改另外一个Form的控件的值

前言&#xff1a; 上篇讲述了如何手工调用海康的车牌识别摄像头进行拍照和识别车牌&#xff0c;我车牌识别的程序在应用的一个窗体&#xff0c;需要去更新另外一个窗体里面的lable中的内容为识别的车牌信息&#xff0c;同时还要写入到另外窗体的datagridview中。 一、实现效果 …

以23年电赛吉林赛区为例,如何避免冤假错案?再谈无人机赛题中不让使用机载计算机的问题!!!

有同学反馈吉林赛区在无人机赛题中使用树莓派后不被允许测评&#xff0c;由于缺少同省样本支撑&#xff0c;并且吉林省G题无人机获得国奖仅有一组&#xff0c;所以仅根据特定情况做回复&#xff0c;不代表任何组委会立场&#xff0c;因为按照该用户表述&#xff0c;自己没有任何…

【HTTP协议】了解http需要学习哪些内容

HTTP&#xff08;Hypertext Transfer Protocol&#xff09;是超文本传输协议&#xff0c;互联网上应用最广泛的一种协议&#xff0c;它负责在客户端和服务器之间传输数据。本文将从HTTP协议的基本原理、请求-响应模型、常见特性以及应用场景等方面进行总结。 1. HTTP基本原理 …

【云原生】Docker 实践(一):在 Docker 中部署第一个应用

Docker 实践&#xff08;一&#xff09;&#xff1a;在 Docker 中部署第一个应用 1.使用 YUM 方式安装 Docker2.验证 Docker 环境3.在 Docker 中部署第一个应用3.1 小插曲&#xff1a;docker pull 报 missing signature key 错误3.2 重新安装 Nginx 1.使用 YUM 方式安装 Docker…

极目楚天 共襄星汉 | 同元软控受邀参加2024年中国航天大会

4月23日至26日&#xff0c;2024 年中国航天大会&#xff08;CSC2024&#xff09;在湖北省武汉市成功举办。大会由中国宇航学会和中国航天基金会联合主办&#xff0c;以“极目楚天 共襄星汉”为主题&#xff0c;汇聚国内外航天领域知名专家、学者、管理者&#xff0c;深入探讨航…

数字IC后端先进工艺设计实现之TSMC 12nm 6Track工艺数字IC后端实现重点难点盘点

大家知道咱们社区近期TSMC 12nm ARM Cortexa-A72(1P9M 6Track Metal Stack)已经开班。这里小编要强调一点:不要认为跑了先进工艺的项目就会很有竞争力&#xff01;如果你仅仅是跑个先进工艺的flow&#xff0c;不懂先进工艺在数字IC后端实现上的不同点&#xff0c;为何有这样的不…

2024年十款开源测试开发工具推荐(自动化、性能、混沌测试、造数据、流量复制)

今天为大家奉献一篇测试开发工具集锦干货。在本篇文章中&#xff0c;将给大家推荐10款日常工作中经常用到的测试开发工具神器&#xff0c;涵盖了自动化测试、性能压测、流量复制、混沌测试、造数据等。 1、AutoMeter-API 自动化测试平台 AutoMeter 是一款针对分布式服务&…

MT3420B 航天民芯代理 1.5MHZ 2A 同步降压转换器 6V输入

深圳市润泽芯电子有限公司为航天民芯一级代理技术支持 欢迎试样~Tel&#xff1a;18028786817 简介 MT3420B是一个1.5MHz恒定频率&#xff0c;电流模式降压转换器。它是理想的便携式设备&#xff0c;需要非常大电流的单电池锂离子电池&#xff0c;同时在峰值负载条件下仍达到超…