辐射渐变

1.代码片段

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    //    painter.translate(QPoint);  重新设置坐标中心点,默认为左上角为(0,0)
    /*painter.translate(QPointF(width()/2.0,height()/2.0));  可将窗口中心设置为坐标中心*/
    //     pPainter->rotate(60);     将坐标轴旋转60度,逆时针
    QRadialGradient radialGradient(310,110,100,310,110);
    //创建了一个QRadialGradient对象实例,参数分别为中心坐标,半径长度和焦点坐标,如果需要对称那么中心坐标和焦点坐标要一致
    radialGradient.setColorAt(0,Qt::green);
    radialGradient.setColorAt(0.2,Qt::white);
    radialGradient.setColorAt(0.4,Qt::blue);
    radialGradient.setColorAt(0.6,Qt::red);
    radialGradient.setColorAt(1.0,Qt::yellow);
    painter.setBrush(QBrush(radialGradient));
    painter.drawEllipse(210,10,200,200);//在相应的坐标画出来

#if 0   
    QPointF pieRectTopLeftPot(0-m_nRadius,0-m_nRadius);
    QPointF pieRectBottomRightPot(0+m_nRadius,0+m_nRadius);
    QRectF pieRect=QRectF(pieRectTopLeftPot,pieRectBottomRightPot);  //左上角的点和右下角的点确定一个正方形


    //将表盘分区间以不同颜色显示
    //红色部分
    QRadialGradient firstGradient(m_centerPointF,m_nRadius,m_centerPointF);
    firstGradient.setColorAt(0,Qt::transparent);
    firstGradient.setColorAt(0.6,Qt::transparent);
    firstGradient.setColorAt(0.61,Qt::transparent);
    firstGradient.setColorAt(0.8,Qt::transparent);
    firstGradient.setColorAt(1.0,Qt::transparent);
    painter.setBrush(firstGradient);
    painter.drawPie(pieRect,225*16, 90*16);  //画一个饼图,起始角度和角度范围差
    /* Qt中,圆形以三点钟方向为0度,逆时针360度回归0度*/

    //黄色部分
    QRadialGradient secondGradient(m_centerPointF,m_nRadius,m_centerPointF);
    secondGradient.setColorAt(0,Qt::transparent);
    secondGradient.setColorAt(0.6,Qt::transparent);
    secondGradient.setColorAt(0.61,QColor(229,229,229));
    secondGradient.setColorAt(0.8,QColor(229,229,229));
    secondGradient.setColorAt(1.0,QColor(229,229,229));
    painter.setBrush(secondGradient);
    painter.drawPie(pieRect,315*16,270*16);
    /*运用辐射渐变,画出一个环形(以前总以为Qt中的表盘环形是两个直径不一致的圆叠加而成的,没想到别人是这样画的,哈哈)*/

 QRadialGradient secondGradient(m_centerPointF,m_nRadius,m_centerPointF);
    secondGradient.setColorAt(0,Qt::transparent);
    secondGradient.setColorAt(0.6,Qt::transparent);
    secondGradient.setColorAt(0.61,Qt::red);
    secondGradient.setColorAt(0.8,Qt::red);
    secondGradient.setColorAt(1.0,Qt::red);
    pPainter.setBrush(secondGradient);
    pPainter.drawPie(pieRect,225*16,-abs(value)*16); //顺时针为负数,逆时针为正,调整好起始角度,可完成一个环形进度条
#endif
}

2.总结

之前写过一篇Qt画图的博客,但是都是最简单的一些,最近碰到了一些需要自定义的控件,于是把别人写的拿出来总结学习了一下,后期还需要继续学习补充!

你可能感兴趣的:(Qt)