zoukankan      html  css  js  c++  java
  • 线性渐变、辐射渐变、角度渐变-QLinearGradient,QRadialGradient,QConicalGradient

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

    从左到右依次为:线性渐变、辐射渐变、角度渐变

    下面来看一下实现的代码,由于程序较简单,所以将解释都加在了每行代码的后边:

      

     

    [cpp] view plain copy
     
    1. #include<QtGui/QApplication>  
    2. #include"gradient_test.h"  
    3. intmain(intargc,char*argv[])  
    4. {  
    5.     QApplicationa(argc,argv);  
    6.     gradient_testw;  
    7.     w.show();  
    8.     returna.exec();  
    9. }  
    10. //gradient_test.h:  
    11. #ifndefGRADIENT_TEST_H  
    12. #defineGRADIENT_TEST_H  
    13. #include<QtGui/QWidget>  
    14. #include<QPainter>  
    15. #include<QStyleOption>  
    16. #include<QResizeEvent>  
    17. classgradient_test:publicQWidget  
    18. {  
    19.     Q_OBJECT  
    20. public:  
    21.     explicitgradient_test(QWidget*parent=0);  
    22.     virtualQSizesizeHint()const;  
    23. protected:  
    24.     voidpaintEvent(QPaintEvent*event);  
    25.     voidresizeEvent(QResizeEvent*event);  
    26. private:  
    27.     QSizeinitSize;  
    28.     QImagewheel;  
    29.     voiddrawLine(constQSize&newSize);  
    30. };  
    31. #endif//GRADIENT_TEST_H  
    32.    
    33.    
    34. //gradient_test.cpp:  
    35. #include"gradient_test.h"  
    36. gradient_test::gradient_test(QWidget*parent)  
    37.     :QWidget(parent),initSize(300,300)  
    38. {  
    39.     resize(650,250);    //窗口大小  
    40. }  
    41. voidgradient_test::drawLine(constQSize&newSize)  
    42. {  
    43.     QPainterpainter(&wheel);   //wheel作为画图对象?  
    44.     painter.setRenderHint(QPainter::Antialiasing);  //消除锯齿  
    45.     wheel.fill(Qt::white);  
    46.     //线性渐变  
    47.     QLinearGradientlinearGradient(20,20,150,150);  
    48.     //创建了一个QLinearGradient对象实例,参数为起点和终点坐标,可作为颜色渐变的方向  
    49.     //painter.setPen(Qt::NoPen);  
    50.     linearGradient.setColorAt(0.0,Qt::green);  
    51.     linearGradient.setColorAt(0.2,Qt::white);  
    52.     linearGradient.setColorAt(0.4,Qt::blue);  
    53.     linearGradient.setColorAt(0.6,Qt::red);  
    54.     linearGradient.setColorAt(1.0,Qt::yellow);  
    55.     painter.setBrush(QBrush(linearGradient));  
    56. painter.drawEllipse(10,10,200,200);     
    57. //前面为左边,后面两个参数为横轴和纵轴,上面的四行分别设置渐变的颜色和路径比例  
    58.    
    59.     //辐射渐变  
    60.     QRadialGradientradialGradient(310,110,100,310,110);  
    61.     //创建了一个QRadialGradient对象实例,参数分别为中心坐标,半径长度和焦点坐标,如果需要对称那么中心坐标和焦点坐标要一致  
    62.     radialGradient.setColorAt(0,Qt::green);  
    63.     //radialGradient.setColorAt(0.2,Qt::white);  
    64.     radialGradient.setColorAt(0.4,Qt::blue);  
    65.     //radialGradient.setColorAt(0.6,Qt::red);  
    66.     radialGradient.setColorAt(1.0,Qt::yellow);  
    67.     painter.setBrush(QBrush(radialGradient));  
    68.     painter.drawEllipse(210,10,200,200);//在相应的坐标画出来  
    69.     //弧度渐变  
    70.     QConicalGradientconicalGradient(510,110,0);  
    71.     //创建了一个QConicalGradient对象实例,参数分别为中心坐标和初始角度  
    72.     conicalGradient.setColorAt(0,Qt::green);  
    73.     conicalGradient.setColorAt(0.2,Qt::white);  
    74.     conicalGradient.setColorAt(0.4,Qt::blue);  
    75.     conicalGradient.setColorAt(0.6,Qt::red);  
    76.     conicalGradient.setColorAt(0.8,Qt::yellow);  
    77. conicalGradient.setColorAt(1.0,Qt::green);  
    78. //设置渐变的颜色和路径比例  
    79.     painter.setBrush(QBrush(conicalGradient));  
    80.     painter.drawEllipse(410,10,200,200);//在相应的坐标画出来  
    81. }  
    82. QSizegradient_test::sizeHint()const  
    83. {  
    84.     returnQSize(height(),height());  
    85. }  
    86. voidgradient_test::resizeEvent(QResizeEvent*event)  
    87. {  
    88.     wheel=QImage(event->size(),QImage::Format_ARGB32_Premultiplied);  
    89.     wheel.fill(palette().background().color());  
    90.     drawLine(event->size());  
    91.     update();  
    92. }  
    93. voidgradient_test::paintEvent(QPaintEvent*event)  
    94. {  
    95.     QPainterpainter(this);  
    96.     QStyleOptionopt;  
    97.     opt.init(this);  
    98.     painter.drawImage(0,0,wheel);  
    99.     style()->drawPrimitive(QStyle::PE_Widget,&opt,&painter,this);  
    100. }  

    http://blog.csdn.net/wangwei890702/article/details/8552482

  • 相关阅读:
    LC 综合 中级算法笔记
    LC 212. 单词搜索2
    [NLP] 2.2 文本正规化 (Text Normalization)
    本地秘钥复制到github,实现两者之间的交互
    Python 实例化对象
    C# 左补齐+ 生成一个星期的日期
    hello world
    迭代器模式、观察者模式
    代理模式、桥接模式、装饰器模式、适配器模式
    外观模式、组合模式、享元模式
  • 原文地址:https://www.cnblogs.com/findumars/p/7270435.html
Copyright © 2011-2022 走看看