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);
}

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

           

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/56810.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于netty实现简易版rpc服务-理论分析

1.技术要点 1.1 rpc协议 定义一个rpc协议类&#xff0c;用于rpc服务端和客户端数据交互。 1.2 netty粘包半包处理 由于数据传说使用tcp协议&#xff0c;rpc协议的数据在网络传输过程中会产生三种情况&#xff1a; 1&#xff09;刚好是完整的一条rpc协议数据 2&#xff09;不…

Java网络编程-简单的API调用

Get请求 - 无参数 安装依赖库 首先需要安装一个库&#xff1a; Okhttp3&#xff0c;这是一个非常流行的 HTTP 库&#xff0c;可以简单、快速的实现 HTTP 调用。 安装 Okhttp3 的方式是在 pom.xml 文件中增加依赖&#xff1a; <!-- https://mvnrepository.com/artifact/co…

【算法】哈希表:49.字母异位词分组

目录 1、题目链接 2、题目介绍 3、解法 初始化设定--图解 步骤图解 4、代码 1、题目链接 49. 字母异位词分组 - 力扣&#xff08;LeetCode&#xff09; 2、题目介绍 3、解法 字母异位词的本质是字符相同但排列不同。因此&#xff0c;我们可以对字符串进行排序&#xf…

YOLOv8实战水果识别【数据集+YOLOv8模型+源码+PyQt5界面】

本文采用YOLOv8作为核心算法框架&#xff0c;结合PyQt5构建用户界面&#xff0c;使用Python3进行开发。YOLOv8以其高效的实时检测能力&#xff0c;在多个目标检测任务中展现出卓越性能。本研究针对水果数据集进行训练和优化&#xff0c;该数据集包含丰富的水果图像样本&#xf…

linux 系统怎么使用

Linux系统的使用涉及多个方面&#xff0c;包括文件管理、目录操作、用户管理、进程管理、网络配置等。以下是对Linux系统基础使用的详细介绍&#xff1a; 一、文件管理 查看文件和目录 ls&#xff1a;列出当前目录的内容。ls -l&#xff1a;以长格式列出当前目录的内容&#x…

CGAL概述

目录 一、概述 主要特点 二、2D、3D几何问题 1、二维几何问题 2、三维几何问题 2、2D、3D 三角剖分 1、二维三角剖分 2、三维三角剖分 3、2D、3D网格处理 1、网格处理 2、基本操作 1. 添加/删除顶点 2. 移动顶点 3. 网格细分与简化 4. 网格平滑 5. 网格修复 6.…

零基础Java第七期:方法的使用

一、方法的概念与使用 1.1. 方法的概念 方法就是一个代码片段. 类似于 C 语言中的 "函数"。方法存在的意义&#xff1a; 是能够模块化的组织代码(当代码规模比较复杂的时候)做到代码被重复使用, 一份代码可以在多个位置使用让代码更好理解更简单直接调用现有方法开…

Solidity基础语法

Solidity的在线编辑器&#xff1a;https://remix.ethereum.org/ 一、合约结构 1、SPDX许可标识&#xff1a;指定代码的开源许可 2、pragma指令&#xff1a;声明Solidity版本 3、导入语句&#xff1a;引入其他合约或库 4、合约声明&#xff1a;使用contract关键字 5、状态变量&…

直流和交流变频压缩机工作原理

直流变频压缩机工作原理&#xff1a; 压缩机定子产生旋转磁场与转子永磁磁场直接作用&#xff0c;实现压缩机运转。转子是永磁体&#xff0c;没有线圈/绕组&#xff0c;无需外部供电&#xff0c;不产生电能损耗&#xff0c;效率高、节能&#xff1b;直流变频压缩机属于同步控制…

查看电脑是使用集成显卡还是独立显卡

查看电脑是使用集成显卡还是独立显卡&#xff0c;可以通过以下几种方法&#xff1a; 1. 系统设备管理器&#xff1a; 在Windows系统中&#xff0c;可以通过设备管理器来查看。按下Win X键&#xff0c;然后选择“设备管理器”&#xff0c;在设备管理器中找到“显示适配器”…

uboot中mmc是使用

进入uboot的界面后 mmc命令 mmc list #查看有哪些可用的mmc设备 mmc dev 0 #切换到mmc的0设备&#xff0c;一般是指SD卡 ls mmc 0:1 #查看mmc 0设备&#xff08;sd卡&#xff09;中1分区保存的信息 ls mmc 0:2 #查看mmc 0设备&#xff08;sd卡&#xff09;中2分区保存的信…

java语法练习-题目

回文数 题目&#xff1a;给你一个整数x&#xff0c;如果x是一个回文整数&#xff0c;打印true&#xff0c;否则返回false 把数字倒过来和原来的数字进行比较 定义数字循环从右向左获取每一个数字拼接比较 public class test1 {public static void main(String[] args) {//1.定…

重构复杂简单变量之用对象替换数据值

对象替换数据值用于将简单的数据值替换为具有行为和逻辑的对象。这种优化的目的在于提高代码的可读性、灵活性和可维护性&#xff0c;尤其是在数据开始承载更多含义或行为的时候。 一、什么时候使用 当我们在代码中使用简单的数据值&#xff08;如字符串、整数&#xff09;表…

Leetcode 1129. 颜色交替的最短路径

1.题目基本信息 1.1.题目描述 给定一个整数 n&#xff0c;即有向图中的节点数&#xff0c;其中节点标记为 0 到 n – 1。图中的每条边为红色或者蓝色&#xff0c;并且可能存在自环或平行边。 给定两个数组 redEdges 和 blueEdges&#xff0c;其中&#xff1a; redEdges[i] …

WPF中的Setter

在 WPF (Windows Presentation Foundation) 中&#xff0c;Setter 是一个定义控件属性值的标记&#xff0c;通常用在 Style 或 Template 中。Setter 用于指定当某些条件满足时&#xff0c;控件的属性应该如何设置。以下是 Setter 的一些关键点&#xff1a; 属性设置&#xff1a…

顺序表算法题【不一样的解法!】

本章概述 算法题1算法题2算法题3彩蛋时刻&#xff01;&#xff01;&#xff01; 算法题1 力扣&#xff1a;移除元素 我们先来看这个题目的要求描述&#xff1a; 把与val相同数值的元素移除掉&#xff0c;忽略元素的相对位置变化&#xff0c;然后返回剩下与val值不同的元素个数…

ARM/Linux嵌入式面经(四六):华为

int32占字节数 问题回答: 在嵌入式系统开发中,数据类型的大小是至关重要的,因为它们直接影响到内存的使用、存储效率以及数据处理的性能。对于int32这一数据类型,它表示一个32位的整数。在大多数现代编程环境中,包括嵌入式系统开发中常用的C和C++语言,int32(或int32_t…

基于SpringBoot+Vue+uniapp的涪陵区特色农产品交易系统的详细设计和实现(源码+lw+部署文档+讲解等)

详细视频演示 请联系我获取更详细的视频演示 项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念&#xff0c;提供了一套默认的配置&#xff0c;让开发者可以更专注于业务逻辑而不…

pytest中@pytest.fixture常用顺序function

ytest中pytest.fixture用法讲解 1、测试函数开始之前2、执行测试函数&#xff1a;3、测试函数结束后&#xff1a; 备注&#xff1a;内容来自chatGPT 在 pytest 中&#xff0c;pytest.fixture 是一个非常强大的功能&#xff0c;用于设置测试所需的环境和状态。它可以通过 scope…

Axios 的基本使用与 Fetch 的比较、在 Vue 项目中使用 Axios 的最佳实践

文章目录 1. 引言2. Axios 的基本使用2.1 安装 Axios2.2 发起 GET 请求2.3 发起 POST 请求2.4 请求拦截器2.5 设置全局配置 3. Axios 与 Fetch 的比较3.1 Axios 与 Fetch 的异同点3.2 Fetch 的基本使用3.3 使用 Fetch 处理 POST 请求 4. 讨论在 Vue 项目中使用 Axios 的最佳实践…