QPainter绘图

Qt的二维图形引擎是基于QPainter类的,绘图的效果取决于QPainter的设置。
QPainter包含三个主要的设置,分别为画笔QPen画刷QBrush字体QFont
画笔用来画线和边缘。它包含颜色、宽度、线型、拐点风格以及连接风格。
QPainter绘图_第1张图片
QPainter绘图_第2张图片
QPainter绘图_第3张图片
画刷用来填充几何形状的图案。它一般由颜色和风格组成,但同时也可以是纹理(一个不断重复的图像)或者是一个渐变。
QPainter绘图_第4张图片
字体用来绘制文字。它包含字体族和磅值大小等属性。

setRenderHint()可以启用反走样,它会告诉QPainter用不同的颜色强度绘制边框以减少视觉扭曲,这种扭曲一般会在边框转换为像素的时候发生

void myWidget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing,true);
    painter.setPen(QPen(Qt::black,15,Qt::SolidLine,Qt::RoundCap,Qt::MiterJoin));
    painter.setBrush(QBrush(Qt::blue,Qt::DiagCrossPattern));
    painter.drawPie(80,80,400,240,60*16,270*16);//drawPie()最后的两个参数以1/16度为单位
}

QPainterPath类可以通过连接基本的图形元素来确定任意的矢量形状,绘制路径是基本的图元。路径可以确定一个边缘,由边缘锁定的区域可以用画刷来填充。
Qt支持三种类型的渐变:线性渐变、锥形渐变和辐射渐变。
QLinerGradient线性渐变由两个控制点定义,连接这两点的线上有一系列的颜色断点。
QLinerGradient gradient(50,100,300,500);
gradient.setColorAt(0.0,Qt::white);
gradient.setColorAt(0.2,Qt::green);
gradient.setColorAt(1.0,Qt::black);
在两个控制点之间的不同位置指定三种颜色。位置用0和1之前的浮点数来指定,0对应第一个控制点,1对应第二个控制点。两个指定断点之间的颜色由线性差值得出。
QRadialGradient辐射渐变由一个中心点(x,y)、半径r、一个焦点(a,b)以及颜色断点定义。中心点和半径定义一个圆,颜色从焦点像外扩散,焦点可以是中心点或者其他圆内的点。
QConicalGradient锥形渐变由一个中心点(x,y)和一个角度a定义。颜色在中心点周围像表的秒针掠过一样扩散。

void drawABezierLine::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing,true);
    painter.save();
    QPainterPath path;
    path.moveTo(80,320);
    path.cubicTo(200,80,320,80,480,320);

    painter.setPen(QPen(Qt::black,8));
    painter.drawPath(path);
    painter.restore();

    painter.save();
    painter.translate(100,0);
    QPointF baseline(200,200);
    QLinearGradient myGradinet(50,100,300,350);
    myGradinet.setColorAt(0.0,Qt::white);
    myGradinet.setColorAt(0.2,Qt::green);
    myGradinet.setColorAt(1.0,Qt::black);
    QPainterPath myPath;
    myPath.addText(baseline,QFont("Arial", 25),tr("Qt"));
    painter.setPen(QPen(Qt::yellow,1));
    painter.setFont(QFont("Arial", 25));
    painter.setBrush(myGradinet);
    painter.drawPath(myPath);
    painter.restore();
}

可以通过调用save()而随时将设备的当前状态存入一个内部堆栈,稍后通过调用restore()恢复。

你可能感兴趣的:(C++GuiQt4编程)