Qt开发————QPainter画图

目录

QPainter

[1.paintEvent 用法概述](#1.paintEvent 用法概述)

2.示例

3.小项目


QPainter

在 Qt 中,paintEvent(QPaintEvent *event) 是一个虚函数,用于在窗口或控件上自定义绘图。它被 QWidget 或其子类调用,每当需要重新绘制窗口时,Qt 会自动触发 paintEvent

1.paintEvent 用法概述

当你想要自定义控件的外观或在窗口上绘制自定义图形时,需要重写 paintEvent 函数。在这个函数内部,你可以使用 QPainter 对象来绘制各种形状、文本、图像等内容。

2.示例

然后转到槽

cpp 复制代码
#include "widget.h"
#include "ui_widget.h"
#include <QPainter>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}

void Widget::paintEvent(QPaintEvent *event){

    Q_UNUSED(event);
/*Q_UNUSED(event) 是 Qt 中的一个宏,用于避免编译器发出"未使用参数"警告。当某个函数接受的参数未被使用时,编译器通常会发出警告,使用 Q_UNUSED 可以显式地标记该参数为"未使用",从而避免此类警告。

具体解释
假设你重写了一个虚函数,但在实现中并不打算使用传入的参数。编译器可能会产生类似于"warning: unused parameter 'event'"这样的警告。为了保持代码整洁并避免这些不必要的警告,可以使用 Q_UNUSED 来告知编译器你知道这个参数未使用。*/

    QPainter painter(this);//创建一个画家对象

    painter.setRenderHint(QPainter::Antialiasing); //设置忽略抗锯齿,更加平滑

    QPen pen; //画笔对象
    pen.setColor(QColor("red"));//设置画笔颜色
    pen.setWidth(5);//画线宽度


    QBrush brush(QColor(0,255,0)); //定义刷子,实例化构造函数填充颜色

    //把画笔和刷子交给画家
    painter.setPen(pen); 
    painter.setBrush(brush);

      //矩形
    painter.drawRect(200,100,100,100);
    //三角形
    QPolygon polygon;
    polygon.setPoints(3,100,20,200,505,300,300);
    painter.drawPolygon(polygon);
    //画线
    painter.drawLine(400,400,500,500);
    //椭圆
    painter.drawEllipse(300,300,200,100);

    //画文本
    QRectF rectF(0,0,100,200);
    painter.drawText(rectF,Qt::AlignHCenter,"Ciallo");




}

3.小项目

看到这个网站Ciallo~(∠・ω< )⌒★ 我就想着用Qt也做一个玩玩,刚好这里也涉及到QPainter的内容,下面我已经把源码以及整个项目封装好了(即使没有Qt环境也可以运行哦),可自行下载食用(欢迎广大尊贵的柚子厨玩家Ciallo~(∠・ω< )⌒☆)

通过网盘分享的文件:ciallo.rar

链接: https://pan.baidu.com/s/184XjcX82bZCv2jpiWsWBnw?pwd=0721 提取码: 0721

效果展示:

1729614962078

相关推荐
傻啦嘿哟4 小时前
某招聘平台爬虫:爬取招聘岗位数据,分析各城市薪资水平
开发语言·爬虫·python
2501_933670794 小时前
2026秋招量化分析岗技能栈:Python、SQL、统计建模、回测项目怎么准备
开发语言·python·sql
李少兄5 小时前
JavaScript 数据类型完全指南
开发语言·javascript·ecmascript
码匠许师傅5 小时前
【设计模式精讲】29.行为型模式总结与对比(Behavioral Patterns Summary)
c++·设计模式·uml
Seoyoneh6 小时前
Agentic Workflow编排架构:云客服从“被动响应”迈向“主动执行”的技术实现
java·开发语言·架构
啦啦啦啦啦zzzz6 小时前
Logger的组装(c++20)
c++·算法·c++20
Tangyuewei6 小时前
Java 写 Agent:模型只是组件
java·开发语言
小玮看世界7 小时前
[Python]从合并区间到传感器融合区:合并区间在传感器区域融合的实际落地
开发语言·python
繁星蓝雨7 小时前
C++的设计与演进大纲(如何从C语言一步步成长为C++)
c语言·开发语言·c++·c++历史·c++演进
Evand J8 小时前
【MATLAB例程,图像降噪滤波9】自适应维纳滑动窗口滤波(Wiener)图像降噪、方法对比,有中文注释
开发语言·图像处理·计算机视觉·matlab·滑动窗口·滤波·降噪