软件开发QT GUI编程my-QT专栏

QPainter和QPainterPath,渐变效果

2021-03-17  本文已影响0人  c之气三段

QPainter:

void myDialog2::paintEvent(QPaintEvent *event)
{
    QPainter textPainter;
    textPainter.begin(this);
    textPainter.setFont(QFont("Times", 24, QFont::Bold));
    textPainter.drawText(QPoint(50, 50), "测试");
    textPainter.end();
 
    QPainter linePainter;
    linePainter.begin(this);
    linePainter.drawLine(QPoint(50, 60), QPoint(100, 100));
    linePainter.end();
 
    QPen ellipsePen;;
    ellipsePen.setColor(Qt::red);
    ellipsePen.setStyle(Qt::DashDotLine);
 
    QPainter ellipsePainter;
    ellipsePainter.begin(this);
    ellipsePainter.setPen(ellipsePen);
    ellipsePainter.drawEllipse(QPoint(80, 200), 50, 20);
    ellipsePainter.end();
 
    QPainterPath rectPath;
    rectPath.addRect(QRect(150, 20, 100, 50));
    QPainter pathPainter;
    pathPainter.begin(this);
    pathPainter.setPen(QPen(Qt::red, 1, Qt::DashDotLine, Qt::FlatCap, Qt::MiterJoin));
    pathPainter.setBrush(Qt::yellow);
    pathPainter.drawPath(rectPath);
    pathPainter.end();
 
    QImage image;
    image.load("D:/pic/lena.jpg");
    QPainter imagePainter;
    imagePainter.begin(this);
    imagePainter.drawImage(QPoint(150, 150), image);
    imagePainter.end();
}

QPainter和QPainterPath:

用途: 它是由一些图形如曲线、矩形、椭圆组成的对象。主要的用途是,能保存已经绘制好的图形。实现图形元素的构造和复用;图形状只需创建一次,然后调用QPainter::drawPath() 函数多次绘制。painterpath 可以加入闭合或不闭合的图形( 如:矩形、椭圆和曲线) 。QPainterPath 可用于填充,描边,clipping 。

使用方法: QPainterPath 一旦创建,直线和曲线都可以被添加入path ,通过lineTo(),arcTo(),cubicTo() 和 quadTo() 函数。currentPosition() 是最后一次绘制后的“结束点”(或初始点)。使用moveTo() 移动currentPosition() 而不会添加任何元素。moveTo() 隐含的开始一个新subpath ,并且闭合前一个。 一个path 添加到另一个path 用connectPath() 。它默认是从原点(0 ,0 )开始绘图,可以使用moveTo ()改变绘图的开始位置。

void QtGuiApplication1::paintEvent(QPaintEvent*) {
    QPainterPath path;

    path.lineTo(100, 200);

    path.addEllipse(100, 200, 50, 50);     // 向path 中添加图形

    QPainter painter(this);
    painter.setPen(Qt::yellow);
    painter.setBrush(Qt::red);

    painter.drawPath(path);   // 绘制前面创建的path
      // 生成可填充的轮廓
    QPainterPathStroker stroker;
    stroker.setCapStyle(Qt::RoundCap);  // 端点风格
    stroker.setJoinStyle(Qt::RoundJoin);  // 连接样式
    stroker.setDashPattern(Qt::DashLine);  // 虚线图案
    stroker.setWidth(10);  // 宽度

    // 生成一个新路径(可填充区域),表示原始路径 path 的轮廓
    QPainterPath outlinePath = stroker.createStroke(path);

    // 绘制轮廓时所用的画笔(轮廓外边框灰色部分)
    QPen pen = painter.pen();
    pen.setColor(QColor(0, 160, 230));
    pen.setWidth(10);

    // 用指定的画笔 pen 绘制 outlinePath
    // painter.strokePath(outlinePath, pen);
    painter.setPen(pen);
    painter.drawPath(outlinePath);

    // 用指定的画刷 brush 填充路径 outlinePath
    painter.fillPath(outlinePath, QBrush(Qt::yellow));
    
}
image.png

渐变色:

https://blog.csdn.net/liang19890820/article/details/51181765

void QtGuiApplication1::paintEvent(QPaintEvent*) {
    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing, true); // 反走样
    QLinearGradient linear(QPointF(80, 130), QPointF(180, 130));//线性填充,点指的是渐变范围,外围外左侧的用第一种色填充,右侧用第二种色填充
    linear.setColorAt(0, Qt::black); //渐变色,只能设置俩个
    linear.setColorAt(1, Qt::white);
    linear.setSpread(QGradient::PadSpread); // 设置显示模式
    painter.setPen(QPen(QColor(255, 255, 255), 2)); // 设置画笔颜色、宽度
    painter.setBrush(linear);// 设置画刷填充
    painter.drawRect(QRect(40, 40, 180, 180));
}

image.png
上一篇下一篇

猜你喜欢

热点阅读