使用QGraphicsBlurEffect实现图片背景模糊效果

本文介绍如何使用QGraphicsBlurEffect在Qt中实现图像模糊效果。通过设置模糊半径和提示,调整图像模糊的质量和性能。代码示例展示了如何在Widget中应用此效果。

先看一下实现效果:
使用QGraphicsBlurEffect实现图片背景模糊效果

使用QGraphicsBlurEffect实现图片背景模糊效果

QGraphicsBlurEffect 可以实现图像的模糊效果,它的相关接口主要有如下两个:

  • void setBlurHints(QGraphicsBlurEffect::BlurHints hints)
  • void setBlurRadius(qreal blurRadius)

setBlurHints 是设置模糊质量的函数,它的参数有如下几种:

  • PerformanceHint 表明渲染性能是最重要的因素,但可能会降低渲染质量。(默认参数)
  • QualityHint 表明渲染质量是最重要的因素,但潜在的代价是降低性能。
  • AnimationHint 表示模糊半径将是动画的,暗示实现可以保留一个源的模糊路径缓存。如果源要动态更改,则不要使用此提示。

setBlurRadius 设置模糊半径,半径越大,模糊效果越明显,默认为5。


完整代码如下:
头文件:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

class QSlider;
class QGraphicsBlurEffect;
class ImageWidget : public QWidget
{
   
   
    Q_OBJECT

public:
    ImageWidget(QWidget* parent = nullptr);
    ~ImageWidget();

    void setPixmap(const QPixmap& pixmap);

protected:
    void paintEvent(QPaintEvent* event) override;

private:
    QPixmap m_pixmap;
};

// ==========================================================
class Widget : public QWidget
{
   
   
    Q_OBJECT

public:
    Widget(QWidget *parent = 0);
    ~Widget();

private:
    ImageWidget* m_pImageWidget = nullptr;
    ImageWidget* m_pEffectImageWidget = nullptr;
    QGraphicsBlurEffect* m_pBlurEffect = nullptr;

protected:
    virtual void resizeEvent(QResizeEvent *event) override;

private slots:
    void onChangeButtonClicked(void);
    void onChangedSlder(int value)
QGraphicsBlurEffect可以应用于QGraphicsScene或QGraphicsItem的背景,以模糊背景,从而突出显示前景内容。以下是在QGraphicsScene中应用QGraphicsBlurEffect的示例: ```python from PyQt5.QtWidgets import QApplication, QGraphicsScene, QGraphicsView, QGraphicsRectItem from PyQt5.QtGui import QColor, QBrush, QGraphicsBlurEffect import sys app = QApplication(sys.argv) scene = QGraphicsScene() view = QGraphicsView(scene) # 创建一个矩形项 rect = QGraphicsRectItem(0, 0, 100, 100) rect.setBrush(QBrush(QColor(255, 0, 0))) # 在场景中添加矩形项 scene.addItem(rect) # 应用模糊效果到场景的背景 blur_effect = QGraphicsBlurEffect() scene.setBackgroundBrush(blur_effect) view.show() sys.exit(app.exec_()) ``` 在上面的代码中,我们首先创建了一个QGraphicsRectItem(即矩形项),并将其添加到场景中。然后,我们创建了一个QGraphicsBlurEffect,将其应用于场景的背景,以模糊背景。最后,我们创建了一个QGraphicsView,并将其显示出来。 如果要将QGraphicsBlurEffect应用于QGraphicsItem的背景,可以使用setGraphicsEffect()方法。例如,以下是将QGraphicsBlurEffect应用于QGraphicsRectItem的示例: ```python from PyQt5.QtWidgets import QApplication, QGraphicsScene, QGraphicsView, QGraphicsRectItem from PyQt5.QtGui import QColor, QBrush, QGraphicsBlurEffect import sys app = QApplication(sys.argv) scene = QGraphicsScene() view = QGraphicsView(scene) # 创建一个矩形项 rect = QGraphicsRectItem(0, 0, 100, 100) rect.setBrush(QBrush(QColor(255, 0, 0))) # 应用模糊效果到矩形项的背景 blur_effect = QGraphicsBlurEffect() rect.setGraphicsEffect(blur_effect) # 在场景中添加矩形项 scene.addItem(rect) view.show() sys.exit(app.exec_()) ``` 在上面的代码中,我们首先创建了一个QGraphicsRectItem,并创建了一个QGraphicsBlurEffect。然后,我们将QGraphicsBlurEffect应用于QGraphicsRectItem的背景,最后将矩形项添加到场景中并显示出来。
评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值