Qt5绘制方法——QPointer常用方法

以下学习可能要花费一个小时左右。如果遇到疑问在评论区留言,我会看到的!加油!

  • 首先创建一个不带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);
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值