以下学习可能要花费一个小时左右。如果遇到疑问在评论区留言,我会看到的!加油!
- 首先创建一个不带ui,且类名修改为 MainWidget(自定),基类为QWidget的项目。
- 在
mainwidget.h中重写QWidget::paintEvent(QPaintEvent *event)函数
void paintEvent(QPaintEvent *event) override;
- 在maiwidget.cpp中写源码
void MainWidget::paintEvent(QPaintEvent *event)
{
/**
为所欲为绘制
*/
}
看到这里肯定有很多小伙伴在疑虑,
为什么要不带ui?
为什么要用QWidget而不用默认的QMainWindow?
为什么要重写paintEvent,不能在构造函数直接用吗?
1、不带ui是我的习惯,在构造函数里设置一些简单的窗口及自定义控件方便。
2、我们重写的paintEvent函数,是在QWidget中的;而QMainWindow也是继承自QWidget,其本身没有该函数,所以我们不用QMainWindow。
3、这个问题我们需要了解QPainter的机制,请往下看。
绘制系统主要依赖于三个类:QPainter、QPainterEngine、QPainterDevice。QPainter可以理解为画笔,我们主要也是用这个类的函数接口。QPainterDevice就是绘画设备,就是我们所见的屏幕。QPainterEngine则是连接画笔和屏幕的引擎,将QPainter翻译到屏幕上;一般我们用不到这个类,因为我们在使用QPainter时,它会由QPainter自动调用。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
下面开始正式学习!!!
一、前期准备
一些可能用到的函数
setPalette(QPalette(Qt::white)); //设置界面背景颜色,白色,自定
setAutoFillBackground(true); //设置自动填充背景色
二、QPainter的绘制接口
1、绘制点
函数原型:
inline void QPainter::drawPoint(const QPointF &p)
{
drawPoints(&p, 1);
}
inline void QPainter::drawPoint(int x, int y)
{
QPoint p(x, y);
drawPoints(&p, 1);
}
inline void QPainter::drawPoint(const QPoint &p)
{
drawPoints(&p, 1);
}
就是一个点坐标,不做解释
QPainter paint(this);
paint.drawPoint(100,100);
如图,,这个点很小,在运行中默认只有一个像素大小。
2、绘制直线
函数原型:
inline void QPainter::drawLine(const QLineF &l)
{
drawLines(&l, 1);
}
inline void QPainter::drawLine(const QLine &line)
{
drawLines(&line, 1);
}
inline void QPainter::drawLine(int x1, int y1, int x2, int y2)
{
QLine l(x1, y1, x2, y2);
drawLines(&l, 1);
}
inline void QPainter::drawLine(const QPoint &p1, const QPoint &p2)
{
QLine l(p1, p2);
drawLines(&l, 1);
}
inline void QPainter::drawLine(const QPointF &p1, const QPointF &p2)
{
drawLine(QLineF(p1, p2));
}
可见,直线原理就是告诉接口两个点坐标,再将两个点相连。
如图,语句
QPainter paint(this);
paint.drawLine(50,50,250,250);
画出的图
3、绘制矩形
函数原型:
inline void QPainter::drawRect(const QRectF &rect)
{
drawRects(&rect, 1);
}
inline void QPainter::drawRect(int x, int y, int w, int h)
{
QRect r(x, y, w, h);
drawRects(&r, 1);
}
inline void QPainter::drawRect(const QRect &r)
{
drawRects(&r, 1);
}
可见,矩形的画法是线申明一个点坐标作为左上落脚点,再定义其长度和高度
如图,使用函数
QPainter paint(this);
paint.drawRect(50,50,200,200);
4、绘制圆角矩阵
原型:
void drawRoundRect(const QRectF &r, int xround = 25, int yround = 25);
QT_DEPRECATED_X("Use drawRoundedRect(..., Qt::RelativeSize) instead")
void drawRoundRect(int x, int y, int w, int h, int = 25, int = 25);

最低0.47元/天 解锁文章
333

被折叠的 条评论
为什么被折叠?



