欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 幼教 > qt QGraphicsEffect详解

qt QGraphicsEffect详解

2024/10/23 23:19:23 来源:https://blog.csdn.net/ckg3824278/article/details/143058810  浏览:    关键词:qt QGraphicsEffect详解

一、QGraphicsEffect概述

QGraphicsEffect通过挂接到渲染管道并在源(例如QGraphicsPixmapItem、QWidget)和目标设备(例如QGraphicsView的视口)之间进行操作来更改元素的外观。它允许开发者为图形项添加各种视觉效果,如模糊、阴影、颜色化、透明度等。

二、QGraphicsEffect的子类

Qt提供了几个QGraphicsEffect的子类,用于实现不同的视觉效果:

  1. QGraphicsBlurEffect:用于产生模糊效果,减少图像的细节。通过调整模糊半径,可以控制模糊效果的强度。
  2. QGraphicsDropShadowEffect:用于为图形项添加阴影效果。可以设置阴影的偏移量、颜色、模糊半径等参数。
  3. QGraphicsColorizeEffect:用于为图形项着色。可以设置颜色的强度和要应用的颜色。
  4. QGraphicsOpacityEffect:用于设置图形项的透明度。可以调整透明度值,并可以使用渐变蒙版来定义透明度的变化。

三、常用方法

  • void setEnabled(bool enabled);

启用或禁用效果。

  • bool isEnabled()const;

检查效果是否启用。

  • void update();

更新效果,强制重新绘制。

  • void draw(OPainter *painter);

纯虚函数,所有子类需要实现以绘制附加效果。

  • ORectF boundingRect() const;

返回应用了效果后的边界矩形。

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QApplication>
#include <QGraphicsPixmapItem>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent),graphicsView(new QGraphicsView(this)),graphicsScene(new QGraphicsScene(this)),pixmapItem(new QGraphicsPixmapItem(QPixmap(":/res/c.png"))),blurButton(new QPushButton("Apply Blur Effect", this)),colorizeButton(new QPushButton("Apply Colorize Effect", this)),shadowButton(new QPushButton("Apply Drop Shadow Effect", this)),opacityButton(new QPushButton("Apply Opacity Effect", this))
{resize(800, 480);QVBoxLayout *layout = new QVBoxLayout;graphicsScene->addItem(pixmapItem);graphicsView->setScene(graphicsScene);layout->addWidget(graphicsView);layout->addWidget(blurButton);layout->addWidget(colorizeButton);layout->addWidget(shadowButton);layout->addWidget(opacityButton);QWidget *container = new QWidget;container->setLayout(layout);setCentralWidget(container);connect(blurButton, &QPushButton::clicked, this, &MainWindow::applyBlurEffect);connect(colorizeButton, &QPushButton::clicked, this, &MainWindow::applyColorizeEffect);connect(shadowButton, &QPushButton::clicked, this, &MainWindow::applyDropShadowEffect);connect(opacityButton, &QPushButton::clicked, this, &MainWindow::applyOpacityEffect);
}MainWindow::~MainWindow()
{
}void MainWindow::applyBlurEffect()
{QGraphicsBlurEffect *blurEffect = new QGraphicsBlurEffect;blurEffect->setBlurRadius(10);pixmapItem->setGraphicsEffect(blurEffect);
}void MainWindow::applyColorizeEffect()
{QGraphicsColorizeEffect *colorizeEffect = new QGraphicsColorizeEffect;colorizeEffect->setColor(Qt::blue);pixmapItem->setGraphicsEffect(colorizeEffect);
}void MainWindow::applyDropShadowEffect()
{QGraphicsDropShadowEffect *shadowEffect = new QGraphicsDropShadowEffect;shadowEffect->setBlurRadius(10);shadowEffect->setOffset(5,5);//阴影与原有图形的间距shadowEffect->setColor(Qt::green);pixmapItem->setGraphicsEffect(shadowEffect);
}void MainWindow::applyOpacityEffect()
{QLinearGradient alphaGradient(pixmapItem->boundingRect().topLeft(), pixmapItem->boundingRect().bottomLeft());alphaGradient.setColorAt(0.0, Qt::transparent);alphaGradient.setColorAt(0.5, Qt::black);alphaGradient.setColorAt(1.0, Qt::transparent);QGraphicsOpacityEffect *blur = new QGraphicsOpacityEffect(this);blur->setOpacity(0.5);//透明度设置该值应该在0.0到1.0的范围内,其中0.0是完全透明的,1.0是完全不透明的。blur->setOpacityMask(alphaGradient);//蒙版设置,透明度和蒙版可单独设置pixmapItem->setGraphicsEffect(blur);
}

觉得有帮助的话,打赏一下呗。。

           

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com