效果:
这部分,我们将使用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版权协议,转载请附上原文出处链接和本声明。