辐射渐变

来源:互联网 发布:会计资格证网络课程 编辑:程序博客网 时间:2024/04/29 14:12

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画图的博客,但是都是最简单的一些,最近碰到了一些需要自定义的控件,于是把别人写的拿出来总结学习了一下,后期还需要继续学习补充!

原创粉丝点击