⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 paintarea.cpp

📁 linux窗口程序设计一书的第五章代码-- 图形与图画,希望对大家有用
💻 CPP
字号:
#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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -