[问题记录]Qt QGraphicsItem 移动时出现残影

目录

1.问题现象

2.问题原因

3.修改方案


1.问题现象

自定义 QGraphicsItem 时,绘制rect,对象移动时出现残影。

ec04162f14e34ac48f9dd191f6293d20.png

2.问题原因

直接原因是view未刷新的问题,所以网上有人使用方案  setViewportUpdateMode(QGraphicsView::FullViewportUpdate); 的方案,但当图片过多时,此方案会造成画面闪烁,耗费资源等问题。

而根本原因是,boundingRect返回大小的问题,存在两种情况:

(1)boundingRect 返回的大小,不能完全包含实际图形大小,导致刷新不全

(2)boundingRect的左上角顶点位置、长宽,未补全画笔宽度,导致原因同(1)

boundingRect函数功能,是将图形项的外部边界定义为一个矩形。所有的绘图操作都必须限制在图形的边界矩形中,QGraphicsView需要使用这个边界来确定重绘的区域。

而边界的宽度,精确为画笔宽度的的一半。

3.修改方案

boundingRect的左上角顶点,需要补充画笔宽度/2,实际矩形的长宽,补全画笔宽度

QRectF CGraphicsDragItem::boundingRect() const
{
    return QRectF(
        -m_penWidth/2,
        -m_penWidth/2,
        m_rectWidth+m_penWidth,
        m_rectHeight+m_penWidth);
}

void CGraphicsDragItem::paint(
    QPainter *painter,
    const QStyleOptionGraphicsItem *option,
    QWidget *widget)
{
    Q_UNUSED(option);
    Q_UNUSED(widget);

    if (hasFocus() || !collidingItems().isEmpty())
    {
        m_penWidth = 10;
        painter->setPen(QPen(QColor(255, 255, 255, 200), m_penWidth));
        if (hasFocus())
        {
            for (auto it : collidingItems())
            {
                it->update();
            }
        }
    }
    else
    {
        m_penWidth = 1;
        painter->setPen(QPen(QColor(100, 100, 100, 100), m_penWidth));
    }

    painter->setBrush(m_clrBrush);
    painter->drawEllipse(0, 0, m_rectWidth, m_rectHeight);
}

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

U盘数据恢复,小白也适用的4个方法!

你是否曾经遇到过这样的情况:当你满怀期待地插入U盘,准备欣赏那些珍贵的照片、视频或重要文件时,却发现U盘中的数据仿佛被一阵海风轻轻吹散,只剩下空荡荡的文件夹和一片茫然。那种失落感,就像是突然发现手中的藏宝图被…

【Linux】进程间通信上 (1.5万字详解)

目录 一.进程间通信介绍 1.1进程间通信的目的 1.2初步认识进程间通信 1.3进程间通信的种类 二.匿名管道 2.1何为管道 2.1实现原理 2.3进一步探寻匿名管道 2.4编码实现匿名管道通信 2.5管道读写特点 2.6基于管道的进程池设计 三.命名管道 3.1实现原理 3.2代码实现 四.…

精打细算做好“节水账”,宏电“灌区哨兵”助力灌区量水监测

节水优先,量水而行。量水监测是高标准农田生产灌溉水资源监测的重要部分,用于解决大面积农业灌溉条件下节点多、距离长、灌区水情自动在线监测的难题,有效实现灌区水资源统一管理、优化配置,提高灌溉效率。 根据灌区所在地域和规模…

获得淘宝app商品详情原数据API接口|商品价格详情页面优惠券主图

item_get_app:通过商品id获取商品详情页数据 注册账号获取API测试地址 公共参数 名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretString是调用密钥api_nameString是API接口名称(包括在请求地址中&#xf…

docker ce的使用介绍

docker docker17.03以后 docker ce,社区免费版,vscode的docker插件使用的该版本(默认windows只支持windows容器,linux支持linux容器)docker ee,企业版本 docker17.03以前 docker toolbox,基于…

【计算机网络】[第4章 网络层][自用]

1 概述 (1)因特网使用的TCP/IP协议体系(四层)的网际层,提供的是无连接、不可靠的数据报服务; (2)ATM、帧中继、X.25的OSI体系(七层)中的网络层,提供的是面向连接的、可靠的虚电路服务。 (3)路由选择分两种: 一种是由用户or管理员人工进行配置(只适用于规…

idea 创建properties文件,解决乱码

设置properties文件编码 点击file->Settings File Encodings->设置utf-8 重新创建.properties文件才生效

Vue64-引入第三方的样式文件

xxx.vue文件里面的样式,一般都是程序员亲自写的,不要在里面复制进第三方的样式代码,不方便后期的维护!!! 第三方的样式,建议作为CSS文件,引入。 一、方式一:第三方的CSS…

C++ Windows Hook使用

GitHub - microsoft/Detours: Detours is a software package for monitoring and instrumenting API calls on Windows. It is distributed in source code form. /*挂载钩子 setdll /d:C:\Users\g\source\repos\LotTest\Release\lotDll.dll C:\Users\g\source\repos\LotTest…

MPLS TE简介

定义 MPLS TE(MPLS Traffic Engineering),即MPLS流量工程。MPLS流量工程通过建立基于一定约束条件的LSP隧道,并将流量引入到这些隧道中进行转发,使网络流量按照指定的路径进行传输,达到流量工程的目的。 …

Redis变慢了?之三

Redis变慢了?之三 Redis变慢了fork耗时优化方案 AOFAOF策略对性能影响 最后 Redis变慢了 Redis变慢上一篇文章地址:Redis变慢了?之二 这篇文章继续Redis变慢情况的分析。 fork耗时 在 Redis 中,fork 是一个非常重要的操作&…

已成功见刊检索的国际学术会议论文海报展示(2)

【先投稿先送审】第四届计算机、物联网与控制工程国际学术会议(CITCE 2024) 大会官网:www.citce.org 时间地点:2024年11月1-3日,中国-武汉 收录检索:EI Compendex,Scopus 主办单位:四川师范…

C# WPF入门学习主线篇(二十二)—— 样式(Styles)的定义和应用

C# WPF入门学习主线篇(二十二)—— 样式(Styles)的定义和应用 欢迎来到C# WPF入门学习系列的第二十二篇。本篇文章将详细介绍WPF中的样式(Styles)的定义和应用。样式在WPF中起到重要作用,通过样…

idea创建Mavenweb项目-提供Servlet 2024idea无法创建解决方式

idea社区版需要自己配置服务器需要去下载插件Tomcat Server 对服务器设置 idea无法创建servlet的问题是2023与2024版本idea做出了改动需要自己手动配置servlet文件 在设置中搜索template也就是模板,然后选择文件和代码板块,点击左上角的添加新的模板 名…

【ARM】MDK在debug模式下断点的类型

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 了解不同情况下,设置的断点的类型是什么。 2、 问题场景 在debug模式下,经常通过断点去调试代码。但是对于断点的类型不了解,不清楚断点为什么会被进入。不了解在不同语句或者情…

推荐一款功能强大的显示器!

最近在写项目开发文档,经常需要几个界面来回切换,真的深刻感受到了一台外接显示器对一名程序员来说有多重要了,画功能流程图的时候嫌弃自己的笔记本屏幕不够大,看代码的时候又在想要是有个旋转屏就好了,来回切换界面的…

Mac数据如何恢复?3 款最佳 Mac 恢复软件

如果您认为 Mac 上已删除的文件永远丢失了,那您就大错特错了!实际上,即使您清空了 Mac 上的垃圾箱,也有许多解决方案可以帮助您恢复已删除的文件。最好的解决方案之一是 Mac 恢复删除软件。最好的Mac 恢复删除应用程序可以轻松准确…

微信多开器

由于微信的限制,我们平时只能登录一个微信,要登录多个微信一般需要多台手机,很显然这种方法很费手机!!一个微信多开神器可以给你省下好几台手机钱,抓紧拉下来放手机里落灰http://www.xbydon.online/?p132 …

「51媒体」活动会议,展览展会,直播曝光的一种方法

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 我们在做活动会议,或者参加展览展会,需要进行直播的时候,可以通过一键同步多个媒体平台的方法,来扩大曝光,比如一场直播我们可…

JDK8和JDK17共存以及切换

1. 下载和安装 1.1下载安装JDK17 下载地址: https://www.oracle.com/cn/java/technologies/downloads/ 1.2安装jdk17 点击下一步 此处可以修改安装的目标位置,修改安装位置后,点击下一步 接下来及安装完成 注意事项 此时通过cmd命令java –version你会发现竟然出现了…