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

server/2024/9/23 14:31:52/

参考:
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.ppmy.cn/server/25048.html

相关文章

释放Stable Diffusion 无限可能

最近在整理大语言模型的系列内容&#xff0c;Stable Diffusion 是我下一篇博客的主题。关注 Stable Diffusion&#xff0c;是因为它是目前最受欢迎和影响力最大的多模态生成模型之一。Stable Diffusion 于 2022 年 8 月发布&#xff0c;主要用于根据文本的描述产生详细图像&…

Docker-compose 简单介绍

目录 一 Docker-compose与 Docker Swarm 1&#xff0c;docker-compose 出现的意义 2&#xff0c; Docker Compose 是什么 3&#xff0c;Docker Swarm 是什么 3&#xff0c;Docker Compose Docker Swarm 主要区别 二 Docker-compose 简介 1&#xff0…

Java23种设计模式-行为型模式之责任链模式

责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;:允许将多个对象连接成一条链&#xff0c;并沿着这条链传递一个请求&#xff0c;直到链上的某个对象能够处理该请求为止。这种模式的目的是解耦请求的发送者和接收者&#xff0c;同时允许多个对象有机会处理…

conda修改当前环境中的python版本

1. 首先查看当前的python版本 python -V 2. 进入已经激活的conda环境&#xff0c;搜索库中有无想要的python版本(若有想安装的版本可跳过) conda search --full --name python 3. 安装库中存在且符合要求的python版本即可(以python3.8.1为例) conda install python3.8.1

【酱浦菌-模拟仿真】python模拟仿真PN结伏安特性

PN结的伏安特性 PN结的伏安特性描述了PN结在外部电压作用下的电流-电压行为。这种特性通常包括正向偏置和反向偏置两种情况。 正向偏置 当外部电压的正极接到PN结的P型材料&#xff0c;负极接到N型材料时&#xff0c;称为正向偏置。在这种情况下&#xff0c;外加的正向电压会…

C++笔记:C++中的重载

重载的概念 一.函数重载 代码演示例子&#xff1a; #include<iostream> using namespace std;//函数名相同&#xff0c;在是每个函数的参数不相同 void output(int x) {printf("output int : %d\n", x);return ; }void output(long long x) {printf("outp…

探索银行IT应用系统架构:构建安全高效的金融科技平台

在当今数字化时代&#xff0c;银行业正面临着前所未有的挑战和机遇。作为金融行业的重要组成部分&#xff0c;银行IT应用系统的架构设计至关重要&#xff0c;直接影响着银行的信息化水平、服务效率和安全性。本文将深入探讨典型银行IT应用系统的架构&#xff0c;为银行业构建安…

第二证券投资参考:汽车以旧换新细则发布 云厂商AI投资持续加码

上星期五&#xff0c;A股放量大涨。两市股指盘中单边上行&#xff0c;午后再度攀升&#xff0c;沪指涨超1%&#xff0c;创业板指大涨超3%&#xff1b;到收盘&#xff0c;沪指涨1.17%报3088.64点&#xff0c;深证成指涨2.15%报9463.91点&#xff1b;创业板指涨3.34%报1823.74点&…