Qt5 QPainter绘制图形

效果:

 

这部分,我们将使用QPainter类绘制线条,矩形框,圆等等,并且在窗口显示文字。我们也将学习到使用QPen类改变矢量图形的风格。

1,创建QT WIDGET APPLICATION工程。

2,打开mainwindow.ui,移除菜单框,工具框,状态栏。

3,在mainwindow.h头文件中添加QPainter头文件

#include <QMainWindow>
#include <QPainter>

4,声明paintEvent(),事件手柄

virtual void paintEvent(QPaintEvent *event);

5,Mainwindow中实现

void MainWindow::paintEvent(QPaintEvent *event)
{
    
}

6,绘制文字

  QPainter textPaint(this);
    textPaint.setFont(QFont("Times",14,QFont::Bold));
    textPaint.drawText(QPoint(100,200),"你好");

7, 绘制直线

QPainter linePainter(this);
linePainter.drawLine(QPoint(50,50),QPoint(100,100));

8,绘制矩形

QPainter rectPainter(this);
rectPainter.setBrush(Qt::BDiaPattern);
rectPainter.drawRect(QRect(100,100,50,50));

9,声明一个QPen类,设置颜色为红色,设置样式为Qt::DashDotLine,将QPen应用到QPainter,并在指定位置绘制一个椭圆形。

//创建QPen
QPen ellipsePen;
ellipsePen.setColor(Qt::red);
ellipsePen.setStyle(Qt::DashDotLine);

//创建QPainter ,并设置QPen
QPainter ellipsePainter(this);
ellipsePainter.setPen(ellipsePen);
ellipsePainter.drawEllipse(QPoint(80,200),50,20);

10,我们也可以使用QPaintPath类定义一个形状,然后传递给QPainter进行渲染。

QPainterPath rectPath;
rectPath.addRect(QRect(150,20,100,50));

QPainter pathPainter(this);
pathPainter.setPen(QPen(Qt::red,1,Qt::DashDotLine,Qt::FlatCap,Qt::MiterJoin));
pathPainter.setBrush(Qt::yellow);
pathPainter.drawPath(rectPath);

11,可以使用QPainterPath绘制任何其他图形比如说一个椭圆形

QPainterPath ellipsePath;
ellipsePath.addEllipse(QPoint(200,120),50,20);

QPainter ellipsePathPainter(this);
ellipsePathPainter.setPen(QPen(QColor(79,106,25),5,Qt::SolidLine,Qt::FlatCap,Qt::MiterJoin));
ellipsePathPainter.setBrush(QColor(122,163,39));
ellipsePathPainter.drawPath(ellipsePath);

12,QPainter也可以绘制一个位图,我们将加载一个ex.jpg的图片,并放在100,150的坐标上。

QImage image;
image.load("ex.jpg");

QPainter imagePainter(this);
imagePainter.drawImage(QPoint(100,150),image);

完整代码

#include "mainwindow.h"
#include "ui_mainwindow.h"


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

}
void MainWindow::paintEvent(QPaintEvent *event)
{
    //绘制文字
    QPainter textPaint(this);
    textPaint.setFont(QFont("Times",14,QFont::Bold));
    textPaint.drawText(QPoint(100,200),"你好");

    //绘制直线
    QPainter linePaint(this);
    linePaint.drawLine(QPoint(120,120),QPoint(400,109));

    //绘制矩形
     QPainter rectPaint(this);
    rectPaint.setBrush(Qt::BDiagPattern);
    rectPaint.drawRect(QRect(100,100,50,50));

    //使用QPen设置QPainter绘制的样式
    QPen pen;
    pen.setColor("blue");
    pen.setStyle(Qt::DashDotLine);
    pen.setBrush(Qt::red);


    QPainter circlePaint(this);
    circlePaint.setPen(pen);
    circlePaint.drawEllipse(300,300,200,200);
   //使用QPainterPath定义图形
    QPainterPath rectPath;
    rectPath.addRect(QRect(QPoint(10,10),QPoint(110,110)));

    QPainterPath ellipsePath;
    ellipsePath.addEllipse(QRectF(100,300,100,100));
   //设定Pen样式
    QPainter pathPainter(this);
    pathPainter.setPen( QPen( Qt::red,1,Qt::SolidLine,Qt::SquareCap,Qt::BevelJoin));

    //设定颜色绘制矩形
    pathPainter.setBrush(Qt::yellow);
    pathPainter.drawPath(rectPath);
    //设定颜色绘制圆形
    pathPainter.setBrush(Qt::red);
    pathPainter.drawPath(ellipsePath);
    //绘制位图
    QImage image;
    image.load(":/new/img/a.jpg");

    QPainter imgPaint(this);
    imgPaint.drawImage(100,200,image);


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


版权声明:本文为shuishou1000原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。