Qt给按钮实现一个渐变色透明蒙层,不能遮挡按钮上的文字,不用样式表,使用绘制的方式
时间: 2023-10-23 07:10:43 浏览: 94
可以通过继承 QPushButton,重写 paintEvent 方法来实现按钮渐变色透明蒙层的效果。
具体做法如下:
1. 在按钮类中定义一个成员变量 m_gradient,用来保存渐变色。
2. 重写 paintEvent 方法,在绘制按钮背景之前,先绘制一个渐变色矩形,然后再调用父类的 paintEvent 方法绘制按钮背景和文字。
3. 在按钮的构造函数中初始化渐变色,可以使用 QLinearGradient 类来实现渐变色效果。
下面是一份示例代码:
```cpp
#include <QPushButton>
#include <QPainter>
class GradientButton : public QPushButton
{
public:
GradientButton(QWidget* parent = nullptr) : QPushButton(parent)
{
// 初始化渐变色
m_gradient.setStart(0, 0);
m_gradient.setFinalStop(0, height());
m_gradient.setColorAt(0, QColor(255, 255, 255, 0));
m_gradient.setColorAt(1, QColor(255, 255, 255, 100));
}
protected:
void paintEvent(QPaintEvent* event) override
{
QPainter painter(this);
// 绘制渐变色矩形
painter.setPen(Qt::NoPen);
painter.setBrush(m_gradient);
painter.drawRect(rect());
// 绘制按钮背景和文字
QPushButton::paintEvent(event);
}
private:
QLinearGradient m_gradient;
};
```
这样,就可以通过继承 QPushButton 类,重写 paintEvent 方法,实现按钮渐变色透明蒙层的效果了。
阅读全文