QT---二维图形三种渐变模式QRadialGradient、QConicalGradient 、QRadialGradient

43 篇文章 8 订阅
 
渐变,是指逐渐的,有规律性的变化,是一种规律性很强的现象。
Qt提供了一个与渐变相关的QGradient类,目前支持三种渐变画刷,
分别是线性渐变(QLinearGradient)、辐射渐变(QRadialGradient)、角度渐变(QConicalGradient),
如下图所示:

 
 
代码如下:
/*---------------头函数-----------------*/
#ifndef GRADIENT_TEST_H
#define GRADIENT_TEST_H
#include<QWidget>
#include<QPainter>
#include<QStyleOption>
#include<QResizeEvent>
class gradient_test:public QWidget
{
    Q_OBJECT
public:
    explicit gradient_test(QWidget*parent=0);
    virtual QSize sizeHint()const;
protected:
    void paintEvent(QPaintEvent*event);
    void resizeEvent(QResizeEvent*event);
private:
    QSize initSize;
    QImage newSize;
    void drawLine(const QSize&newSize);
};

/*---------------原函数-----------------*/

#endif//GRADIENT_TEST_H
#include "widget.h"
gradient_test::gradient_test(QWidget*parent)
    :QWidget(parent),initSize(300,300)
{
    resize(650,250);    //窗口大小
}
void gradient_test::drawLine(const QSize& initSize)
{
    QPainter painter(&newSize);   //wheel作为画图对象?
    painter.setRenderHint(QPainter::Antialiasing);  //消除锯齿
    newSize.fill(Qt::white);
    //线性渐变
    QLinearGradient linearGradient(0,0,330,330);
    //创建了一个QLinearGradient对象实例,参数为起点和终点坐标,可作为颜色渐变的方向
    //painter.setPen(Qt::NoPen);
    linearGradient.setColorAt(0.0,Qt::green);
    linearGradient.setColorAt(0.2,Qt::white);
    linearGradient.setColorAt(0.4,Qt::blue);
    linearGradient.setColorAt(0.6,Qt::red);
    linearGradient.setColorAt(1.0,Qt::yellow);
    painter.setBrush(QBrush(linearGradient));
    painter.drawRect(10,10,200,200);
   //前面为左边,后面两个参数为横轴和纵轴,上面的四行分别设置渐变的颜色和路径比例
 
    //辐射渐变
    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.drawRect(210,10,200,200);//在相应的坐标画出来
    //弧度渐变
    QConicalGradient conicalGradient(510,110,0);
    //创建了一个QConicalGradient对象实例,参数分别为中心坐标和初始角度
    conicalGradient.setColorAt(0,Qt::green);
    conicalGradient.setColorAt(0.2,Qt::white);
    conicalGradient.setColorAt(0.4,Qt::blue);
    conicalGradient.setColorAt(0.6,Qt::red);
    conicalGradient.setColorAt(0.8,Qt::yellow);
    conicalGradient.setColorAt(1.0,Qt::green);
//设置渐变的颜色和路径比例
    painter.setBrush(QBrush(conicalGradient));
    painter.drawRect(410,10,200,200);//在相应的坐标画出来
}
QSize gradient_test::sizeHint()const
{
    return QSize(height(),height());
}
void gradient_test::resizeEvent(QResizeEvent*event)
{
    newSize=QImage(event->size(),QImage::Format_ARGB32_Premultiplied);
    newSize.fill(palette().background().color());
    drawLine(event->size());
    update();
}
/*void gradient_test::paintEvent(QPaintEvent*event)
{
    QPainter painter(this);
    QStyleOption opt;
    opt.init(this);
    painter.drawImage(0,0,newSize);
    style()->drawPrimitive(QStyle::PE_Widget,&opt,&painter,this);
}*/
 
void gradient_test::paintEvent(QPaintEvent *)
{
    QStyleOptionButton option;
    option.initFrom(this);
    option.state = isDown() ? QStyle::State_Sunken : QStyle::State_Raised;
    if (isDefault())
        option.features |= QStyleOptionButton::DefaultButton;
    option.text = text();
    option.icon = icon();
 
    QPainter painter(this);
    style()->drawControl(QStyle::CE_PushButton, &option, &painter, this);
}
/*---------------main-----------------*/
#include "widget.h"
#include <QApplication>
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    gradient_test w;
 
    w.show();
 
    return a.exec();
}
 

 

                
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值