Qt5基础图形绘制小项目---PaintArea类

      通过本例,介绍各种图形的区分,以及画笔颜色,画笔宽度,画笔线宽,画笔风格,画笔顶帽,画笔连接点,填充模式,铺展效果,画刷风格设置。效果如下

      

思路:

       主要分为两部分:

  • 用于绘图的区域PaintArea类
  • 主窗口MainWidget类       
//打开“paintarea.h”头文件,添加如下代码:
#include <QPen>
#include <QBrush>
class PaintArea : public QWidget
{    
    Q_OBJECT
public:
    enum Shape{Line,Rectangle,RoundRect,Ellipse,Polygon,Polyline, Points, Arc,Path,Text,Pixmap};
    explicit 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;
};
#include "paintarea.h"
#include <QPainter>
PaintArea::PaintArea(QWidget *parent):
	QWidget(parent)
{
    //完成对窗体背景色的设置
    setPalette(QPalette(Qt::white));
    setAutoFillBackground(true);
   
    setMinimumSize(400,400);
}
void PaintArea::setShape(Shape s)
{
    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(50,100,300,200);
 
 
    static const QPoint points[4]=
    {
        QPoint(150,100),
        QPoint(300,150),
        QPoint(350,250),
        QPoint(100,300)
    };
    //弧度
    int startAngle =50*16;
    int spanAngle =120*16;
 
 
    QPainterPath path;
    path.addRect(150,150,100,100);
    path.moveTo(100,100);
    path.cubicTo(300,100,200,200,300,300);
    path.cubicTo(100,300,200,200,100,100);
    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); 	break;
        case Polyline:                                          //多边线
            p.drawPolyline(points,4); 	break;
        case Points:                                      	//点
            p.drawPoints(points,4); 	break;
        case Arc:                                          	//弧
            p.drawArc(rect,startAngle,spanAngle);	 break;
        case Path:                                         	//路径
            p.drawPath(path); 	break;
        case Text:                                        	//文字
            p.drawText(rect,Qt::AlignCenter,tr("Hello Qt!"));	break;
        case Pixmap:                                      	//图片
            p.drawPixmap(150,150,QPixmap("butterfly.png")); 	break;
        default: 	break;
    }
}
 
 

 绘制图形函数:QPainter()和QPainterPath()

 1.QPainter()为开发者提供了丰富的绘制基本图形的draw函数,如:

   

2.QPainterPath 类(绘图路径)提供了一个容器,用于绘图操作,可以创建和重用图形形状。绘图路径是由许多图形化的构建块组成的对象,例如:矩形、椭圆、直线和曲线。构建块可以加入在封闭的子路径中,例如:矩形或椭圆。封闭的路径的起点和终点是一致的,或者他们可以作为未封闭的子路径独立存在,如:直线和曲线。

贝赛尔曲线:

void QPainterPath::cubicTo(qreal c1X, qreal c1Y, qreal c2X, qreal c2Y, qreal endPointX, qreal endPointY)


猜你喜欢

转载自blog.csdn.net/m0_37806112/article/details/80273564
今日推荐