qframe 绘图_QT 基本图形绘制

1  如果要在绘图设备(一般为窗口部件)上绘图,只需创建一个QPainter,再将指针传到该设备中。

例如:

void MyWidget::paintEvent(QPaintEvent *event)

{

QPainter painter(this);

}

2  常用的初始化:画笔、画刷、字体

画笔:用来画线和边缘。它包含颜色、宽度、线性、拐点风格以及连线风格。

画刷:用来填充几何图形的图案。它一般由颜色和风格组成,但同时也可以是纹理(一个不断重复的图像)或者是一个渐变。

字体:用来绘制文字。字体有很多属性,包括字体族和磅值大小。

5.具体的实例

通过建立一个画图面板来了解Qpainter是怎样绘制图形的,其中包含两个类,画图的区域PainterArea类和主窗口mainWindow类

(1)实现PainterArea类

//paintarea.h

#ifndef PAINTAREA_H

#define PAINTAREA_H

#include

#include

#include

class PaintArea : public QWidget

{

Q_OBJECT

public:

enum Shape{Line,Rectangle,RoundRect,Ellipse,Polygon,Polyline,Points,Arc,Path,Text,

Pixmap};

PaintArea(QWidget * parent=0);

void setShape(Shape); //设置形状

void setPen(QPen); //设置画笔

void setBrush(QBrush); //设置画刷

void setFillRule(Qt::FillRule);//设置填充模式

void paintEvent(QPaintEvent *);//重画事件

private:

Shape shape;

QPen pen;

QBrush brush;

Qt::FillRule fillRule;

};

#endif // PAINTAREA_H

//paintarea.cpp

#include "paintarea.h"

#include

PaintArea::PaintArea(QWidget *parent)

:QWidget(parent)

{

setPalette(QPalette(Qt::white)); //设置背景颜色

setAutoFillBackground(true);//设置自动填充背景色

setMinimumSize(400,400);//设置窗口最下大小

}

void PaintArea::setShape(Shape s) //update()更新窗口部件

{

shape=s;

update();

}

void PaintArea::setPen(QPen p)

{

pen=p;

update();

}

void PaintArea::setBrush(QBrush b)

{

brush=b;

update();

}

void PaintArea::setFillRule(Qt::FillRule rule)

{

fillRule=rule;

update();

}

//重画事件

void PaintArea::paintEvent(QPaintEvent *)

{

QPainter p(this);

p.setPen(pen);

p.setBrush(brush);

QRect rect(100,100,250,200);//构造一个矩形

static const QPoint points[4]={

QPoint(100,100),

QPoint(200,150),

QPoint(300,250),

QPoint(150,300)

};//确定Points的四个点的坐标

int startAngle=60*16;

int spanAngle=180*16; //为绘制曲线设置参数变量

QPainterPath path; //QPainterPath为Qpainter类提供了一个存储容器,里面包含了画的内容和画的顺序,

path.moveTo(50,150); //当前位置移动到坐标50,150

path.lineTo(350,150); //当前位置开始画直线,终点位置坐标350,150

path.lineTo(100,325);

path.lineTo(200,50);

path.lineTo(300,325);

path.lineTo(50,150);

path.setFillRule(fillRule); //设置填充模式

switch(shape)

{

case Line: //直线

p.drawLine(rect.topLeft(),rect.bottomRight()); //绘制直线。起点为矩形左上点,终点为矩形右下点

break;

case Rectangle: //长方形

p.drawRect(rect);

break;

case RoundRect: //圆角方形

p.drawRoundRect(rect);

break;

case Ellipse: //椭圆形

p.drawEllipse(rect);

break;

case Polygon: //多边形

p.drawPolygon(points,4); //绘制4个顶点多边形

break;

case Polyline: //多边线

p.drawPolyline(points,4);

break;

case Points: //点

p.drawPoints(points,4);

break;

case Arc: //弧

p.drawArc(rect,startAngle,spanAngle); //后面两个参数分别为 起始角与跨度角<

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值