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.rhkb.cn/news/451663.html

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

相关文章

Redis——事务

文章目录 Redis 事务Redis 的事务和 MySQL 事务的区别:事务操作MULTIEXECDISCARDWATCHUNWATCHwatch的实现原理 总结 Redis 事务 什么是事务 Redis 的事务和 MySQL 的事务 概念上是类似的. 都是把⼀系列操作绑定成⼀组. 让这⼀组能够批量执行 Redis 的事务和 MySQL 事务的区别:…

无人机之融合集群技术篇

无人机的融合集群技术是一个涉及多个领域的复杂技术体系&#xff0c;它结合了无人机技术、自组网技术、集群控制技术以及反制设备等多个方面&#xff0c;旨在实现多架无人机之间的协同、编队、信息共享、任务分配和高效作业。 一、无人机自组网技术 无人机自组网技术是一种利用…

UDP/TCP协议

网络层只负责将数据包送达至目标主机&#xff0c;并不负责将数据包上交给上层的哪一个应用程序&#xff0c;这是传输层需要干的事&#xff0c;传输层通过端口来区分不同的应用程序。传输层协议主要分为UDP&#xff08;用户数据报协议&#xff09;和TCP&#xff08;传输控制协议…

1. 安装框架

一、安装 Laravel 11 框架 按照官方文档直接下一步安装即可 1. 安装步骤 2. 执行数据库迁移 在.env文件中提前配置好数据库连接信息 php artisan migrate二、安装 Filament3.2 参考 中文文档 进行安装 1. 安装 拓展包 composer require filament/filament:"^3.2" -W…

cisco网络安全技术第3章测试及考试

测试 使用本地数据库保护设备访问&#xff08;通过使用 AAA 中央服务器来解决&#xff09;有什么缺点&#xff1f; 试题 1选择一项&#xff1a; 必须在每个设备上本地配置用户帐户&#xff0c;是一种不可扩展的身份验证解决方案。 请参见图示。AAA 状态消息的哪一部分可帮助…

java基于SpringBoot+Vue+uniapp微信小程序的自助点餐系统的详细设计和实现(源码+lw+部署文档+讲解等)

项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念&#xff0c;提供了一套默认的配置&#xff0c;让开发者可以更专注于业务逻辑而不是配置文件。Spring Boot 通过自动化配置和约…

几何完备的3D分子生成/优化扩散模型 GCDM-SBDD - 评测

GCDM 是一个新的 3D 分子生成扩散模型&#xff0c;与之前的 EDM 相比&#xff0c;GCDM 优化了其中的图神神经网络部分&#xff0c;使用手性敏感的 SE3 等变神经网络 GCPNET 代替了 EDM 中的 EGNN&#xff0c;让节点间消息传递、聚合根据手性不同而进行。本文对 GCDM-SBDD&#…

Linux操作系统与windows无法相互复制问题

请先看完此文在进行操作&#xff01;&#xff01;&#xff01; 对于无法复制我们逐层分析&#xff1a; 1.为什么无法复制是不是少了什么工具(open-vm-tools-destop) 上网查阅可以看到如下 2.在此之前我的虚拟机装完Ubuntu 16.04的linux系统无法进行apt update(参考一下) li…

【ARM】MDK-Flex服务管理软件使用说明

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 记录MDK网络版部署工具Imtools.exe 的各个界面中相关配置的功能说明 2、 问题场景 解决客户咨询&#xff0c;该服务管理软件如何使用&#xff0c;为客户使用服务管理软件后期自行维护增加一定指导作用。 3、软硬件环…

JCO发表加州大学团队最新医学AI研究,从常规HE染色切片预测同源重组缺陷和铂类药物反应|顶刊精析·24-10-18

小罗碎碎念 这篇文章是关于一项名为DeepHRD的深度学习平台的研究&#xff0c;该平台能够从常规的苏木精-伊红&#xff08;H&E&#xff09;染色组织切片中预测同源重组缺陷&#xff08;HRD&#xff09;和铂类药物反应。 作者角色姓名单位第一作者Erik N. Bergstrom加州大学圣…

RTThread-Nano学习二-RT-Thread启动流程

一、简介 上一章&#xff0c;我们已经了解了如何通过MDK来移植RTT&#xff0c;不熟悉的可以看如下链接&#xff1a;RTThread-Nano学习一-基于MDK移植-CSDN博客本章我们就来继续了解一下&#xff0c;RTT的启动流程。 二、启动流程 官方给了一幅非常清晰的启动流程图&am…

【尚跑】2024咸阳高新区半程马拉松赛141完赛,时隔一年终于pb,天时地利人和的结果

1、赛事背景 10月13日上午8点30分&#xff0c;“追梦一体化 奔跑再出发”2024咸阳高新半程马拉松赛在创业广场鸣枪开跑&#xff0c;来自全国各地5000名马拉松爱好者汇聚于此&#xff0c;一同奔跑。 谢宇航以1:12:32的成绩&#xff0c;获得男子半程马拉松冠军。李兴焯、李瑜分别…

L9110H电机驱动模块使用指南

接上电后(5V)&#xff0c;以MOTOR B为例 如果使得 B-1A 1 B-2A 0 即B-1A端为5V&#xff0c;B-2A端为0V

Elasticsearch是做什么的?

初识elasticsearch 官方网站&#xff1a;Elasticsearch&#xff1a;官方分布式搜索和分析引擎 | Elastic Elasticsearch是做什么的&#xff1f; Elasticsearch 是一个分布式搜索和分析引擎&#xff0c;专门用于处理大规模数据的实时搜索、分析和存储。它基于 Apache Lucene …

spring boot 3.3.4 网关(gateway) 集成knife4j 4.4.0

spring boot版本 3.3.4&#xff0c;jdk 22&#xff0c; springcloud 2023.0.3 官方参考链接 Spring Cloud Gateway网关聚合 | Knife4j (xiaominfo.com) springboot版本信息 <properties> <java.version>22</java.version> <spring-cloud.version>2023…

软件企业选择第三方软件检测机构有哪些好处?

在软件开发的当今时代&#xff0c;确保软件的质量和性能是每个企业面临的挑战&#xff0c;因此软件检测公正必不可少。随着市场的需求&#xff0c;越来越多企业会选择将该项工作交由第三方软件检测机构进行。第三方软件检测机构指独立于软件开发方和需求方的第三方机构&#xf…

Java基于SSM微信小程序物流仓库管理系统设计与实现(源码+lw+数据库+讲解等)

选题背景 随着社会的发展&#xff0c;社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。 本文以实际运用为开发背景&#xff0c;运用软件工程原理和开发方法&#xff0c;它主要是采用java语言技术和mysql数据库来完成对系统的设计。整个…

EMCMO--多任务优化求解约束多目标问题

EMCMO–多任务优化求解约束多目标问题 title&#xff1a; An Evolutionary Multitasking Optimization Framework for Constrained Multi-objective Optimization Problems author&#xff1a; Kangjia Qiao, Kunjie Yu, BoyangQu, Jing Liang, Hui Song, and Caitong Yue. …

C++基础补充(03)C++20 的 std::format 函数

文章目录 1. 使用C20 std::format2. 基本用法3. 格式说明 1. 使用C20 std::format 需要将VisualStudio默认的标准修改为C20 菜单“项目”-“项目属性”&#xff0c;打开如下对话框 代码中加入头文件 2. 基本用法 通过占位符{}制定格式化的位置&#xff0c;后面传入变量 #…

rk3588 opencv 的使用

-------------------------------------------------------------------------------------------------------- 目前是 3588 上无法 直接编译出 C程序。 报错如下&#xff1a; -----------------------------------------------------------------------------------------…