1、概述
QLinearGradient是Qt框架中QGradient的一个子类,用于创建线性渐变效果。线性渐变是一种颜色沿着一条直线平滑过渡到另一种颜色的效果。QLinearGradient允许你定义渐变的起点和终点,以及在这些点之间的颜色变化。你可以使用它来为图形、背景、边框等添加丰富的视觉效果。
2、重要方法
QLinearGradient提供了一系列方法来设置和控制线性渐变的效果。以下是一些重要的方法:
QLinearGradient(const QPointF &start, const QPointF &finalStop)
:构造函数,用于创建一个从start
点到finalStop
点的线性渐变。void setStart(const QPointF &start)
:设置渐变的起点。void setFinalStop(const QPointF &finalStop)
:设置渐变的终点。QPointF start()
:返回渐变的起点。QPointF finalStop()
:返回渐变的终点。void setColorAt(qreal position, const QColor &color)
:在渐变中设置一个颜色停靠点。position
是一个0到1之间的浮点数,表示颜色在渐变中的位置(0表示开始,1表示结束)。color
是该位置的颜色。QList<QGradientStop> stops()
:返回渐变中所有颜色停靠点的列表。
3、重要信号
与QGradient一样,QLinearGradient本身并不直接发出信号。它是用于描述渐变效果的类,而不是一个交互式控件。然而,当使用QLinearGradient与绘图相关的类(如QPainter)一起时,可以通过监听绘图相关的事件或信号来间接地了解渐变的使用情况。
4、常用枚举类型
QLinearGradient并没有定义自己的枚举类型。它继承了QGradient的枚举类型,如QGradient::Type
(用于标识渐变的类型,对于QLinearGradient来说,这个值总是QGradient::LinearGradient
)、QGradient::CoordinateMode
(用于设置渐变的坐标模式)等。
#include <QApplication>
#include <QWidget>
#include <QPainter>class GradientDemo : public QWidget {
public:GradientDemo(QWidget *parent = nullptr) : QWidget(parent) {resize(400, 300);}protected:void paintEvent(QPaintEvent *event) override {QPainter painter(this);// Create a linear gradient from top-left to bottom-rightQLinearGradient gradient(0, 0, width(), height());// Add color stopsgradient.setColorAt(0.0, Qt::red);gradient.setColorAt(0.5, Qt::yellow);gradient.setColorAt(1.0, Qt::blue);// Fill the entire widget with the gradientpainter.fillRect(rect(), gradient);// Create another gradient for demonstrationQLinearGradient horizontalGradient(0, height()/2, width(), height()/2);horizontalGradient.setColorAt(0.0, QColor(0, 255, 0, 127));horizontalGradient.setColorAt(1.0, QColor(0, 0, 255, 127));// Draw a rectangle with the second gradientpainter.fillRect(50, 50, width()-100, height()-100, horizontalGradient);}
};int main(int argc, char *argv[]) {QApplication app(argc, argv);GradientDemo window;window.setWindowTitle("QLinearGradient Demo");window.show();return app.exec();
}
觉得有帮助的话,打赏一下呗。。
需要商务合作(定制程序)的欢迎私信!!