QPainter::end: Painter ended with 2 saved states 如何解决

QPainter使用注意点 今天使用QPainter绘制图形,把过程写到了MainWindow的构造函数中了.发现没有如期出现绘制好的图形.后来发现网上的例子大多都是写在paintEvent函数中的. 后来查看了QPainter的官方文档,有如下的叙述 Warning:When the paintdevice is a widget,QPaintercan only be used inside a paintEvent() function or in a function called by paintEvent(... 阅读详情
AI摘要

本文介绍了一个关于QPainter对象在结束时出现未恢复状态的问题及解决方案。主要讨论了如何通过平衡save()和restore()调用来避免状态不平衡,提出了使用RAII技巧进行状态管理的方法。

QPainter::end: Painter ended with 2 saved states 是一个警告信息,它表明 QPainter 对象在结束时还存在未恢复的状态栈。这通常发生在 QPainter 对象被销毁(即调用其析构函数)时,如果存在未通过 restore() 方法平衡掉的 save() 调用。

为了解决这个问题,你需要确保每次调用 save() 之后都有对应的 restore() 调用。这意味着,每当你保存了 QPainter 的状态后,必须在结束绘制之前恢复它。下面是一些建议来解决这个问题:

  1. 平衡 save() 和 restore() 调用:
    确保每次调用 save() 之后,都有相应的 restore() 调用。这可以通过使用类似栈的数据结构来管理保存的状态,确保每次保存状态后都能正确恢复。
  2. 使用 RAII 技巧:
    你可以创建一个小的管理类,它在构造时调用 save(),在析构时调用 restore()。这样,当管理类对象离开其作用域时,它会自动恢复 QPainter 的状态。
  3. 检查代码逻辑:
    仔细审查你的代码,特别是在复杂的绘制逻辑中,确保没有遗漏的 restore() 调用。
  4. 异常处理:
    如果你的代码中有可能抛出异常的逻辑,并且这些异常可能在调用 save() 后、restore() 前被抛出,那么你需要确保在异常处理程序中正确地恢复 QPainter 的状态。
  5. 简化状态管理:
    尽量减少 save() 和 restore() 的使用,只在必要时保存和恢复状态。这可以减少出错的机会。

下面是一个简单的示例,展示了如何使用 RAII 技巧来管理 Q

Qt中QPainter的问题 我在进行2D绘制时,采用了QPainter的方法,想在QLabel上绘图,所以直接就QPainter painter, painter.begin(label);报错QPainter::begin: Paint device returned engine == 0, type: 1 QPainter::end: Painter not active, aborted QWidget::pai 阅读详情

相关推荐

QPainter保存与恢复:save与restore函数浅析

在Qt中进行图像绘制,需要用到QPainter对象,这个对象可以帮助我们完成一些简单功能的绘制,比如说绘制线条,绘制折线等简单的绘制功能。 QPainter对象,有两个很有意思的函数,这两个函数相互之间起作用,下面,我们就来看一下这两个函数,save函数与restore函数。 painter->save();//保存当前Painter状态 transform.translate(m_point.x(), m_point.y()); //沿着x坐标系移动第一个变量,沿着y

weixin_44339813的博客 6852

解决PYQT QBackingStore::endPaint() called with active painter; did you forget to destroy it or call QP

在投屏的工具上,添加了一个进度条出现了如下报错: QBackingStore::endPaint() called with active painter; did you forget to destroy it or call QPainter::end() on it? 代码如下: screen_air.py from PyQt5 import QtCore, QtGui, QtWidgets import time import mainActivity import sys from a

Sodnrn的博客 3388

4.1QPainter绘图讲解

4.QPainter绘图讲解4.1 初识QPainter4.2 QPainter的接口介绍4.2.1 QPainter中的画笔、画刷介绍4.2.2 QPainter绘制接口4.2.3 QPainter的save和restore4.2.4 QPainter的平移、放缩、旋转效果讲解。

前行之路还需前行 340

【FLINK+Kerberos+kafka】在华为云上 bootstrap.server使用IP的GSS initiate failed 问题处理

目前互联网上所有的资料显示都是说没有正确设置KDC之类的,但本博主实际通过java代码低版本 如使用kafka-client 0.11.0 ,2.4.0等版本手动创建kafkaconfig 或者使用华为云的LoginUtils类 都能够正常链接,所以应该是高版本添加了相关配置,或者flink在subtask 创建kafkaAdminClient时 丢弃或使用了默认的一些配置行为,导致了客户端和kdc验证之间出现了principal 不一致导致验证失败。client.dns.lookup配置项作用。

honghanyue1791的博客 574

如何使用MCP2518FD外部CAN FD控制器实现速速CAN通信

1、SPI时序MCP2518FD外部CAN FD控制器具有小尺寸和SPI接口,可实现轻松连接。可将CAN FD通道轻松添加到缺少CAN FD外设或没有所需CAN FD通道的微控制器上。MCP2518FD支持经典格式 (CAN 2.0B) 和CAN灵活数据速率 (CAN FD) 格式中的CAN帧格式,符合ISO11898-1:2015标准。框图:本文实验板MCU:CAN FD控制器:MCP2518FDCAN FD收发器:ATA6560开发环境:想了解开发板更详细信息,请点击。

qq_57798018的博客 1万+

基于STM32的智能衣柜系统开发实战(附完整源码与硬件设计)

本文详细介绍了基于STM32的智能衣柜系统开发实战,包括硬件设计、软件架构和云端功能实现。系统具备实时温湿度监控、自动加热除湿、紫外线杀菌等核心功能,通过STM32F103C8T6主控芯片和ESP8266无线模块实现智能控制。附完整源码与硬件设计,适合科技爱好者和开发者参考。

peach的博客 781

物联网技术(AIR780E cat1-4G模块+小程序+腾讯云MQTT)驱动的智能井盖系统设计(连载01)

终端设备采用AIR780E模块作为主控器,电子模块有三轴加速度传感器、可燃气体传感器,AIR780E模块(4G模块)通过MQTT通信协议进行数据打包上传至EMQX服务器,在EMQX服务器中,用户可以自行订阅主题和发布主题,小程序通过MQTT通信协议订阅EMQX服务器的主题,服务器通过接收到硬件发布的数据,转发到微信小程序。

leida_3669的博客 2218

Latex | IEEE双栏排版中长公式的排版

IEEE双栏排版中,有时候公式过于长了,过宽,导致单栏排版不下。

qq_43466146的博客 1万+

在 SAP ECC 中定义 ledger 时遇到 “Define exactly one leading ledger“(消息号 FAGL_LEDGER_CUST012)的错误

摘要:SAP系统要求必须且只能定义一个主导分类账(Leading Ledger)。当出现错误消息FAGL_LEDGER_CUST012时,需通过事务码FINSC_LEDGER或SPRO路径检查分类账配置,确保仅有一个分类账被标记为"LeadingLedger",其余设为"Non-leadingLedger"。主导分类账是SAP默认用于标准报表的核心分类账,修改配置需谨慎以免影响已有数据。若问题未解决,建议检查未完成配置或查阅SAP Notes获取解决方案。

金牌架构师 802

Python 爬虫实战:亚马逊商品评论 + 评分抓取(情感分析数据预处理)

在电子商务领域,用户评论是了解产品口碑和市场反馈的重要渠道。亚马逊作为全球领先的电商平台,拥有海量的商品评论数据。本文将详细介绍如何使用 Python 编写爬虫程序,从亚马逊网站抓取商品评论和评分数据,并进行情感分析的数据预处理。

yansideyucsdn的博客 769

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

上一篇: QImage和QPixmap的区别和使用
下一篇: QTransform 简介
低配天才
博客等级 码龄10年 277粉丝 57原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值