Qt Gui 第八章

一、QGradient

该类是渐变画刷相关的类,有三个子类,分别是QConicalGradient、QRadialGradient和QLinearGradient

 
 

  1、QConicalGradient是圆锥画刷;通过确定中心点,然后以跟初始轴的夹角位置,向两边扩散;x轴是中心点水平向右;angle是相对x轴的位置作为起始点

QConicalGradient(const QPointF &center, qreal angle)

    QConicalGradient coneGradient(0,0,-90.0);
    coneGradient.setColorAt(0.0,Qt::darkGray);
    coneGradient.setColorAt(0.2,niceBlue);
    coneGradient.setColorAt(0.5,Qt::white);
    coneGradient.setColorAt(1.0,Qt::darkGray);

是以(0,0)位置为原点,相对x轴-90度,则相当于-Y轴方向为起始点开始渲染颜色;

setColorAt的第一个参数x是指360*x所对应的角度作为起始位置向两边扩散,着指定的颜色;

  2、QRadialGradient是同心圆画刷;通过指定中心位置,然后指定跟中心点距离,假定全长为1,进行扩散;这个函数有两个中心点;center和focalPoint;center指定了实际的圆心;focalPoint则是指在渲染颜色的时候,跟center的中间点作为渲染圆心进行同心圆渲染;如下两张图所示

QRadialGradient haloGradient(0,0,20,0,0);
QRadialGradient haloGradient(0,0,20,30,30);

这里通过修改如上标注的不同参数而产生的结果;

3、QLinearGradient是线性画刷;要指定以哪一条线为基准进行从a点到b渲染画刷;如下从start点到finalStop点进行渲染画刷;

QLinearGradient(const QPointF &start, const QPointF &finalStop)

二、世界变换;QTransform

它允许移动、缩放、旋转或者拉伸绘制的项;

如下则是旋转示例,加粗部分是对应的旋转的用法;

    QTransform transform;
    for (int i = 0; i <= MaxMinutes; ++i) {
        transform.rotate(-i*DegreesPerMinute);
        painter->setWorldTransform(transform);
        if (i%5== 0) {
            painter->setPen(thickPen);
            painter->drawLine(0,-41,0,-44);
            painter->drawText(-15,-41,30,30,
                              Qt::AlignHCenter|Qt::AlignTop,
                              QString::number(i));
        } else {
            painter->setPen(thinPen);
            painter->drawLine(0,-42,0,-44);
        }
        transform.rotate(i*DegreesPerMinute);
    }

上面代码显示的结果如下截图所示

QPainter里面也包含世界变换里面的简单函数;当只是进行简单旋转获得拉伸等操作的时候,直接使用painter进行操作即可;如下示例所示,也能达到上图的效果;

    for (int i = 0; i <= MaxMinutes; ++i) {
        painter->save();
        painter->rotate(-i*DegreesPerMinute);
        if (i%5== 0) {
            painter->setPen(thickPen);
            painter->drawLine(0,-41,0,-44);
            painter->drawText(-15,-41,30,30,
                              Qt::AlignHCenter|Qt::AlignTop,
                              QString::number(i));
        } else {
            painter->setPen(thinPen);
            painter->drawLine(0,-42,0,-44);
        }
        painter->restore();
    }

猜你喜欢

转载自www.cnblogs.com/czwlinux/p/12324925.html