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

参考:
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, heightpainter.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.hqwc.cn/news/659487.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

速成python

一个只会c的苦手来总结一下py的语法。没有其他语法基础的不建议看 1. 输入输出 print自带换行&#xff0c;可以写print("Hi", end"")取消换行 a input(你好:) # 默认是str print(type(a)) # 输出a的类型 a int(input()) # 或者a int(a) print(type(…

在ADS中进行稳定性分析的严格方法-使用返回差与策动点阻抗

在ADS中进行稳定性分析的严格方法-使用返回差与策动点阻抗 在ADS中进行稳定性分析&#xff08;以避免K稳定性因子的局限性&#xff09;-理论部分中介绍了奈奎斯特图的基本原理和判定方法&#xff0c;并在ADS中举例稳定和不稳定的例子。 在在ADS中进行稳定性分析的多种理论方法…

【介绍下Android开发环境的搭建】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

洗地机哪个牌子质量最好?四款年度口碑品牌盘点

在当今家庭生活中&#xff0c;洗地机技术的飞速发展给我们的日常带来了极大的便利。洗地机作为智能家居领域的佼佼者&#xff0c;其实用性和智能化程度受到越来越多消费者的欢迎。许多人在选洗地机时会纠结一个问题&#xff1a;洗地机哪个牌子质量最好&#xff1f; 洗地机怎么…

Visual Studio中怎样更改Nuget程序包源

场景 Visual Studio 2019 在使用NuGet添加依赖包时&#xff0c;在预览中搜索不到程序包。 排查下NuGet的程序包源为本地。 将程序包源修改下。 实现 在解决方案上右击选择管理解决方案中的NuGet程序包(在 Visual Studio 中打开“工具”>“选项”>“NuGet 包管理器”…

Python 2 and3 兼容性问题的工具库之six使用详解

概要 在 Python 社区中&#xff0c;随着 Python 2 的逐渐退出舞台&#xff0c;许多项目需要同时兼容 Python 2 和 Python 3。为了简化这一任务&#xff0c;Python 社区开发了一个名为 six 的工具库&#xff0c;它提供了一组函数和工具&#xff0c;使得编写兼容 Python 2 和 Py…

一文全面了解 Kaggle 平台:数据科学和机器学习的理想之地

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 在数据科学&#xff08;Data Science&#xff09;领域&#xff0c;Kaggle 可以称得上是一座人人都想挑战的高峰。Kaggle 是一个国际知名的数据科学竞赛平台&#xff0c;由 Anthony Goldbloom 和 Ben Ha…

Python实用记录(十六):PyQt/PySide6联动VSCode便捷操作指南

文章目录 一、安装vscode和配置pyside6环境二、安装vscode扩展三、扩展配置编辑四、编辑运行 一、安装vscode和配置pyside6环境 这一步默认已经通过了 二、安装vscode扩展 三、扩展配置编辑 四个地方需要修改&#xff1b;rcc路径、uic路径、designer.exe路径 uic.exe 用于将…

2024轮椅行业市场发展变革与趋势:“手动”和“智能”的巅峰对决

众所周知&#xff0c;中国正在逐步进入老龄化时代。在老龄化加重、政策扶持、技术升级等多种因素的共同作用下&#xff0c;轮椅产业也实现了快速突破。 根据鲸参谋数据显示&#xff0c;今年Q1季度线上轮椅市场&#xff08;京东天猫淘宝&#xff09;累计销量近60万件&#xff0…

如何安全可控的进行跨区域数据交换,提高数据价值?

跨区域数据交换指的是在不同地理位置或不同网络环境下的数据传输和共享。随着数字化转型的加速&#xff0c;企业及组织越来越依赖于数据的流动来优化业务流程、增强决策制定和推动创新。然而&#xff0c;跨区域数据交换也带来了一系列的挑战和风险&#xff0c;主要包括&#xf…

记录k8s以docker方式安装Kuboard v3 过程

原本是想通过在k8s集群中安装kuboad v3的方式安装kuboard&#xff0c;无奈在安装过程中遇到了太多的问题&#xff0c;最后选择了直接采用docker安装的方式&#xff0c;后续有时间会补上直接采用k8s安装kuboard v3的教程。 1.kuboard安装文档地址&#xff1a; 安装 Kuboard v3 …

【ruoyi-vue】关于slf4j日志使用

系列文章目录 【ruoyi-vue】 关于slf4j日志使用 文章目录 系列文章目录一、slf4j概述二、使用slf4j1.代码方式使用Slf4j2.lombok使用注解引入Slf4j3.对关键模块单独记录日志文件 三、配置slf4j1.项目配置2.改造3. 日志级别及优先级 四、logback.xml配置文件解析1.定义日志文件…