一、基于Qt实现高光图形
废话不多说,直接看效果、看代码。
二、效果图
三、实现代码
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
protected:
void paintEvent(QPaintEvent *event) override;
};
#endif // WIDGET_H
#include "Widget.h"
#include <QPainter>
#include <QRadialGradient>
#include <QBrush>
#include <QVector>
#include <QPair>
#include <QDebug>
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
resize(500,500);
}
Widget::~Widget()
{
}
void Widget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
QPointF centerP = QPointF((width() >> 1),(height() >> 1));
painter.translate(centerP);
QRadialGradient radial(QPointF(0,0),100,QPointF(0,-80));
radial.setSpread(QGradient::PadSpread);
QGradientStops stops; // QVector< QPair<qreal,QColor> >
stops << QGradientStop(0.00, QColor::fromRgba(0xffffffff));
stops << QGradientStop(0.11, QColor::fromRgba(0xfff9ffa0));
stops << QGradientStop(0.13, QColor::fromRgba(0xfff9ff99));
stops << QGradientStop(0.14, QColor::fromRgba(0xfff3ff86));
stops << QGradientStop(0.49, QColor::fromRgba(0xff93b353));
stops << QGradientStop(0.87, QColor::fromRgba(0xff264619));
stops << QGradientStop(0.96, QColor::fromRgba(0xff0c1306));
stops << QGradientStop(1.00, QColor::fromRgba(0));
radial.setStops(stops);
painter.setBrush(radial);
painter.setPen(Qt::NoPen);
painter.drawEllipse(QPointF(0,0),100,100);
}