QPaint绘制图形

news/2024/11/28 3:34:04/

流程

继承QWidget类,重写paintEvent方法,在其中使用QPainter进行绘图。

举例

创建项目,项目结构如下:

在这里插入图片描述

// widget.h#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();// 画笔颜色QColor m_outlineColor;// 刷子颜色QColor m_fillColor;// 在cpp文件重新painEvent方法void paintEvent(QPaintEvent *event) override;// 使用QPainter绘制矩形void drawRectangle(QPainter *painter);private:Ui::Widget *ui;
};
#endif // WIDGET_H
// widget.cpp#include "widget.h"
#include "ui_widget.h"#include <QPainter>
#include <QBrush>
#include <QPen>Widget::Widget(QWidget *parent)// 初始化列表,画笔颜色为黑色,刷子颜色为红色: QWidget(parent), m_outlineColor(Qt::black), m_fillColor(Qt::red), ui(new Ui::Widget)
{ui->setupUi(this);// 设置窗口大小350*350resize(350,350);}Widget::~Widget()
{delete ui;
}// 定义paintEvent方法
void Widget::paintEvent(QPaintEvent *event)
{Q_UNUSED(event)QPainter painter(this);// 设置画笔// QPen用法见后面painter.setPen(QPen(m_outlineColor, 5, Qt::DashDotLine,Qt::RoundCap));// 设置画刷painter.setBrush(QBrush(m_fillColor, Qt::SolidPattern));drawRectangle(&painter);
}// 绘制矩形
void Widget::drawRectangle(QPainter *painter)
{painter->drawRect(QRect(50,50,200,100));
}

main.cpp不作修改。

运行结果

在这里插入图片描述

常用的绘制函数

1、drawLine(x1, y1, x2, y2):画一条线段,起点为(x1, y1),终点为(x2, y2)

// 在paintEvent方法中调用即可
void Widget::drawLine(QPainter *painter)
{painter->drawLine(10,10,60,10);
}

2、drawRect(x, y, w, h):绘制一个矩形,左上角坐标为(x, y),宽度为w,高度为h

void Widget::drawRectangle(QPainter *painter)
{painter->drawRect(QRect(50,50,200,100));
}

3、drawEllipse(x, y, w, h):绘制一个椭圆形,左上角坐标为(x, y),宽度为w,高度为h

void Widget::drawEllipse(QPainter *painter)
{painter->drawEllipse(250,50,100,80);
}

4、drawText(x, y, text):在指定的坐标(x, y)上绘制文本text

void Widget::drawText(QPainter *painter)
{QFont font = QFont("Arial",16);painter->setFont(font);painter->drawText(50,200,"hello Qt");}

setPen用法

setPen函数是Qt中QPainter类的一个函数,用于设置绘制图形的画笔属性。
函数声明如下:

void setPen(const QPen &pen);

参数为一个QPen类型的对象,用于指定画笔属性,如颜色、线宽、线型等。例如,我们可以使用setPen函数来设置画笔颜色为红色:

QPen pen(Qt::red);
painter.setPen(pen);

也可以使用链式写法来设置画笔属性:

painter.setPen(QPen(Qt::red, 2, Qt::DashLine));

其中,第一个参数为画笔颜色,第二个参数为线宽,第三个参数为线型,第四个参数为画笔端点的风格,第五个参数为画笔连接点的风格

  • QPen的第三个参数,它是一个 Qt::PenStyle 枚举类型,常用的线型如下:

    • Qt::SolidLine:实线

    • Qt::DashLine:短横线

    • Qt::DotLine:点线

    • Qt::DashDotLine:短横点线

    • Qt::DashDotDotLine:短横双点线

  • QPen的第四个参数表示画笔端点的风格,它是一个 Qt::PenCapStyle 枚举类型,常用的类型如下:

    • Qt::SquareCap:方形端点

    • Qt::FlatCap:平底端点

    • Qt::RoundCap:圆形端点

QBrush用法

QBrush是Qt中的画刷类,用于设置绘制图形的填充颜色或者填充图片等属性。在Qt的绘图中,使用QBrush常常和QPainter一起使用,用来设置绘制图形的填充属性。

常用的QBrush构造函数有以下几种:

QBrush(); // 默认画刷
// 第一个参数指定颜色,如Qt::red
// 第二个参数指定填充风格
// Qt::SolidPattern 实心填充
// Qt::DiagCrossPattern 斜向填充
QBrush(const QColor &color, Qt::BrushStyle style = Qt::SolidPattern); // 指定颜色和填充风格
QBrush(const QPixmap &pixmap); // 使用图片填充画刷

实例

// widget.h#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QLabel>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();QColor m_outlineColor;QColor m_fillColor;void paintEvent(QPaintEvent *event) override;// 绘制矩形void drawRectangle(QPainter *painter);// 绘制直线void drawLine(QPainter *painter);// 绘制椭圆void drawEllipse(QPainter *painter);// 绘制文本void drawText(QPainter *painter);private:Ui::Widget *ui;
};
#endif // WIDGET_H
// widget.cpp#include "widget.h"
#include "ui_widget.h"#include <QDateTime>
#include <QPainter>
#include <QBrush>
#include <QPen>Widget::Widget(QWidget *parent): QWidget(parent), m_outlineColor(Qt::black), m_fillColor(Qt::red), ui(new Ui::Widget)
{ui->setupUi(this);resize(350,350);}Widget::~Widget()
{delete ui;
}void Widget::paintEvent(QPaintEvent *event)
{Q_UNUSED(event)QPainter painter(this);painter.setPen(QPen(m_outlineColor, 5, Qt::SolidLine));painter.setBrush(QBrush(m_fillColor, Qt::DiagCrossPattern));drawRectangle(&painter);drawLine(&painter);drawEllipse(&painter);drawText(&painter);
}void Widget::drawRectangle(QPainter *painter)
{painter->drawRect(50,50,200,100);
}void Widget::drawLine(QPainter *painter)
{painter->drawLine(10,10,60,10);
}void Widget::drawEllipse(QPainter *painter)
{painter->drawEllipse(250,50,100,80);
}void Widget::drawText(QPainter *painter)
{QFont font = QFont("Arial",16);painter->setFont(font);painter->drawText(50,200,"hello Qt");}

在这里插入图片描述


http://www.ppmy.cn/news/559787.html

相关文章

简单图论:迷路

题目链接 迷路 题目描述 windy 在有向图中迷路了。 该有向图有 n n n 个节点&#xff0c;节点从 1 1 1 至 n n n 编号&#xff0c;windy 从节点 1 1 1 出发&#xff0c;他必须恰好在 t t t 时刻到达节点 n n n。 现在给出该有向图&#xff0c;你能告诉 windy 总共有…

数字信号处理 大作业 简易变声器

占坑&#xff0c;待写 第一时间更新在我的Blog

电子书阅读器背景颜色修改方法

最近下载了一些电子书&#xff0c;PDF格式的&#xff0c;总用浏览器阅读感觉不是很爽&#xff0c;于是下载了一个阅读器sumatra&#xff0c;有很多小功能&#xff0c;用起来还不错&#xff0c;在设置里调了一个很舒服的背景颜色&#xff0c;&#xff08;小学初中的时候用爱读掌…

光影魔术手

转载请标明是引用于 http://blog.csdn.net/chenyujing5678 欢迎拍砖! 光影魔术手软件下载地址&#xff1a; http://www.neoimaging.cn/ 1、图片的压缩 2、图片的缩放 即改变图片的像素大小 3、添加水印 工具->水印

特效变声器(安卓)

首先&#xff0c;软件不用注册登录&#xff0c;安装即是会员&#xff0c;在软件主页&#xff0c;这里主要有自制语音包&#xff0c;文字转语音&#xff0c;实时变声等功能。 另外软件内置超多语音包&#xff0c;并且对各种语音包还有详细的分类&#xff0c;像女声日常&#xff…

Java实现变声器

最近逛B站发现一个有趣的视频&#xff0c;使用Java开发一款变声器&#xff0c;之前一直搞不明白究竟怎么实现。 视频地址&#xff1a;https://www.bilibili.com/video/BV1JK411A7dm/ 记得关注哦&#xff0c;宝藏UPER。 第一步获取驱动&#xff1a; //声音管理器AudioManage…

10分钟训练属于你的AI变声器

今天推荐一款开源AI变声器&#xff0c;安装过程很友好&#xff0c;不用经历各种麻烦的环境问题&#xff0c; 作者提供了windows下的安装包&#xff0c;一键安装启动很方便。 目前好像对显卡有要求&#xff0c;nvidia显卡支持&#xff0c;amd显卡不支持。 功能特点 使用top1检…

利用python制作语音变声器,这么牛的技术还不来学?

APP 也有文字转换为语音的功能&#xff0c;虽然听起来很别扭&#xff0c;但是基本能解决长辈们看不清文字或者眼睛疲劳&#xff0c;通过文字转换为语音来获取信息。 我们用 Python 能否实现文字转语音呢&#xff0c;可以的&#xff0c;百度有个语音接口&#xff0c;可以在 Pyt…