最全的QgraphicsEffect设置

在Qt中,QGraphicsEffect有四个子类,分别为QGraphicsBlurEffect, QGraphicsColorizeEffect, QGraphicsDropShadowEffect, and QGraphicsOpacityEffect,用于实现模糊、着色、阴影、透明度功能
下面就是对这四种功能以及效果做测试
1.QGraphicsBlurEffect,将图片或窗口模糊化,呈现失焦效果
代码如下

QFrame* pTestFrame = new QFrame(this);
	pTestFrame->setFixedSize(QSize(200, 200));
	pTestFrame->move(100, 110);
	 // 创建高斯模糊效果
	QGraphicsBlurEffect* blurEffect = new QGraphicsBlurEffect;
	blurEffect->setBlurHints(QGraphicsBlurEffect::QualityHint);
	blurEffect->setBlurRadius(2); // 设置模糊半径

	// 将高斯模糊效果应用于控件的背景
	pTestFrame->setAutoFillBackground(true);
	QPalette palette;
	palette.setBrush(QPalette::Background, QBrush(QColor(255,255,255, 40))); // 设置背景颜色
	pTestFrame->setPalette(palette);
	QGraphicsEffect* oldEffect = pTestFrame->graphicsEffect();
	pTestFrame->setGraphicsEffect(blurEffect);

在这里插入图片描述

针对于setBlurHints函数主要用于模糊性能参数的设置
QGraphicsBlurEffect::PerformanceHint  //表明渲染性能是最重要的因素,但潜在的代价是较低的质量。
QGraphicsBlurEffect::QualityHint //表示渲染质量是最重要的因素,但潜在的代价是较低的性能。
QGraphicsBlurEffect::AnimationHint //表示模糊半径将是动画的,暗示实现可以保留源的模糊版本的缓存。如果源要动态更改,则不要使用此提示。

2.QGraphicsColorizeEffect,图片或窗口、控件着色
代码如下
QFrame* pTestFrame = new QFrame(this);
	pTestFrame->setFixedSize(QSize(200, 200));
	pTestFrame->move(100, 110);
	pTestFrame->setAutoFillBackground(true);
auto blur = new QGraphicsColorizeEffect(this);
    blur->setStrength(0.5);//强度0.0等于没有效果,而1.0意味着完全着色。测试发现越接近1,颜色值越深
    blur->setColor(Qt::green);//颜色
    QPalette palette;
	palette.setBrush(QPalette::Background, QBrush(QColor(255, 255, 255, 40))); // 设置背景颜色
	pTestFrame->setPalette(palette);
	auto oldEffect = pTestFrame->graphicsEffect();
  pTestFrame ->setGraphicsEffect(blur);

在这里插入图片描述

QGraphicsDropShadowEffect,图片或窗口、控件设置阴影
代码如下
QFrame* pTestFrame = new QFrame(this);
	pTestFrame->setFixedSize(QSize(200, 200));
	pTestFrame->move(100, 110);
	pTestFrame->setAutoFillBackground(true);
QGraphicsDropShadowEffect* shadoweffect = new QGraphicsDropShadowEffect(this);
    shadoweffect->setOffset(5,5);//阴影与原有图形的间距
    shadoweffect->setColor(Qt::green);
    shadoweffect->setBlurRadius(10);//阴影半径
    pTestFrame->setGraphicsEffect(shadoweffect);

在这里插入图片描述

4.QGraphicsOpacityEffect,图片或窗口、控件设置透明度
代码如下
//蒙版参数设置start
	QFrame* pTestFrame = new QFrame(this);
	pTestFrame->setFixedSize(QSize(200, 200));
	pTestFrame->move(100, 110);
	pTestFrame->setAutoFillBackground(true);
    auto rect = pTestFrame ->rect();
    QLinearGradient alphaGradient(rect.topLeft(), rect.bottomLeft());
    alphaGradient.setColorAt(0.0, Qt::transparent);
    alphaGradient.setColorAt(0.5, Qt::black);
    alphaGradient.setColorAt(1.0, Qt::transparent);
    //蒙版参数设置end

    auto blur = new QGraphicsOpacityEffect(this);
    blur->setOpacity(0.5);//透明度设置该值应该在0.0到1.0的范围内,其中0.0是完全透明的,1.0是完全不透明的。
    blur->setOpacityMask(alphaGradient);//蒙版设置,透明度和蒙版可单独设置、
    QPalette palette;
	palette.setBrush(QPalette::Background, QBrush(QColor(255, 255, 255, 40))); // 设置背景颜色
	pTestFrame->setPalette(palette);
    pTestFrame ->setGraphicsEffect(blur);

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
QGraphicsEffect是Qt中用于实现图形特效的类,可以通过继承该类来实现自定义的图形特效。想要实现颜色加深的特效,可以继承QGraphicsEffect类,并重写其draw()方法。 具体实现步骤如下: 1.继承QGraphicsEffect类,并重写其draw()方法。 2.在draw()方法中获取当前绘制的QPainter对象,并使用QPainter的setCompositionMode()方法设置绘制模式为CompositionMode_SourceOver。 3.使用QPainter的setOpacity()方法设置透明度为0.5(或其他合适的值)。 4.使用QPainter的setBrush()方法设置画刷颜色为深色。 5.使用QPainter的drawRect()方法绘制一个与原图一样大小的矩形。 6.调用基类的draw()方法继续绘制原图。 下面是示例代码: ``` class DarkenEffect : public QGraphicsEffect { public: DarkenEffect(QObject *parent = nullptr) : QGraphicsEffect(parent) {} void draw(QPainter *painter) override { // 获取当前绘制的QPainter对象 QPaintDevice *pdev = painter->device(); QRectF bounds = boundingRectFor(sourceRectForBoundingRect(pdev->boundingRect())); QRect pixelRect = bounds.toAlignedRect(); // 使用CompositionMode_SourceOver绘制模式 painter->setCompositionMode(QPainter::CompositionMode_SourceOver); // 设置透明度为0.5 painter->setOpacity(0.5); // 设置画刷颜色为深色 painter->setBrush(QColor(0, 0, 0, 255)); // 绘制矩形 painter->drawRect(pixelRect); // 调用基类的draw()方法继续绘制原图 QGraphicsEffect::draw(painter); } }; ``` 使用该特效的示例代码如下: ``` QLabel *label = new QLabel(this); label->setPixmap(QPixmap(":/image/image.png")); DarkenEffect *effect = new DarkenEffect(); label->setGraphicsEffect(effect); ``` 上述代码中,label是一个QLabel控件,其显示了一张图片。通过创建一个DarkenEffect特效对象,并设置为label的图形特效,就可以实现对图片的颜色加深特效。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Pailugou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值