paintarea.cpp

来自「Linux窗口程序设计__Qt4精彩实例分析上面的源代码第二部分.以循序渐进的方」· C++ 代码 · 共 69 行

CPP
69
字号
#include "paintarea.h"
#include <math.h>

#define PI 3.1415926535

PaintArea::PaintArea(MainWidget *parent)
{
    setPalette(QPalette(Qt::white));
    setAutoFillBackground(true);
    
    setMinimumSize(400,400);
    
    mainWidget = parent;

    startPoint = QPoint(0,0);
    endPoint = QPoint(400,400);
}


void 
PaintArea::mousePressEvent(QMouseEvent * e)
{
    startPoint = e->pos();
}

void 
PaintArea::mouseReleaseEvent(QMouseEvent * e)
{
    endPoint = e->pos();
    isMouse = true;
    update();
}

void 
PaintArea::paintEvent(QPaintEvent *)
{ 
    QPainter p(this);
    QRect r = rect();
    if (mainWidget->style == Qt::LinearGradientPattern) 
    {
        QLinearGradient linearGradient(startPoint,endPoint);
        linearGradient.setColorAt(0.0, mainWidget->startColor);
        linearGradient.setColorAt(1.0, mainWidget->endColor);
        linearGradient.setSpread(mainWidget->spread);
        p.setBrush(linearGradient);
    } 
    else if (mainWidget->style == Qt::RadialGradientPattern) 
    {
        int r = sqrt(pow(endPoint.x()-startPoint.x(),2) + pow(endPoint.y()-startPoint.y(),2));
        QRadialGradient radialGradient(startPoint, r, startPoint);
        radialGradient.setColorAt(0.0, mainWidget->startColor);
        radialGradient.setColorAt(1.0, mainWidget->endColor);
        radialGradient.setSpread(mainWidget->spread);
        p.setBrush(radialGradient);
    } 
    else if (mainWidget->style == Qt::ConicalGradientPattern) 
    {
        double angle = atan2(endPoint.y()-startPoint.y(), endPoint.x()-startPoint.x());

        QConicalGradient conicalGradient(startPoint, -(180*angle)/PI);
        conicalGradient.setColorAt(0.0, mainWidget->startColor);
        conicalGradient.setColorAt(1.0, mainWidget->endColor);
        p.setBrush(conicalGradient);
    }
 
    p.drawRect(r);

}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?