美文网首页软件开发QT GUI编程my-QT专栏
QPainter和QPainterPath,渐变效果

QPainter和QPainterPath,渐变效果

作者: c之气三段 | 来源:发表于2021-03-17 14:15 被阅读0次

    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

    相关文章

      网友评论

        本文标题:QPainter和QPainterPath,渐变效果

        本文链接:https://www.haomeiwen.com/subject/dioscltx.html