Qt 多次绘图

使用Qt 的时候发现:

  • 背景:自己定义一个类,把它和某个ui文件绑定。(类似 Qt creator 默认创建的工程)
  • 问题:当鼠标在窗口内单击的时候会触发2次绘图。?难道不应该是一次吗?

于是开始了如下的测试:

  • 创建 qt creator 默认带有ui的工程。
  • 重写 paintevent 虚函数,利用静态变量实现计数

在这里插入图片描述
简述主要实验结果:

  • 如果不使用 ui 文件,那都是刷新一次,正常。
  • 如果使用 ui 文件,仅仅组合:(主窗口QWidget + Ui类QWidget 是正常的刷新一次,其他的都是两次)。

请问有高手知道这是怎么回事吗?

代码

我的代码有5个文件

  • cmapedit.h
  • cmapedit.cpp
  • main.cpp 没有任何修改
  • MapEditUi_MainWindow.ui 没有任何修改
  • MapEditUi_Widget.ui 没有任何修改

cmapedit.h

/*** @brief     自定义主窗口类* @details   仅修改  paintEvent,通过宏定义实现动态编译* @mainpage* @date 2023-10-24*/#ifndef CMAPEDIT_H
#define CMAPEDIT_H#include <QWidget>
#include <QMainWindow>
#include "ui_MapEditUi_MainWindow.h"
#include "ui_MapEditUi_Widget.h"#define inherit_QMainWindow             // 宏定义:继承自 QMainWindow 还是 QWidget
#define USE_QMainWindow                 // 宏定义:ui类是 QMainWindow 还是 QWidget#ifdef inherit_QMainWindowclass CMapEdit : public QMainWindow
#elseclass CMapEdit : public QWidget
#endif
{Q_OBJECTpublic:CMapEdit(QWidget *parent = nullptr);~CMapEdit();void paintEvent(QPaintEvent *);public:static int m_iCount;#ifdef USE_QMainWindowUi::MapEditUi_MainWindow   *ui = nullptr;#elseUi::MapEditUi_Widget       *ui = nullptr;#endif
};
#endif // CMAPEDIT_H

cmapedit.cpp

#include "cmapedit.h"
#include <QDebug>int CMapEdit::m_iCount = 1;#ifdef inherit_QMainWindowCMapEdit::CMapEdit(QWidget *parent): QMainWindow(parent)
#elseCMapEdit::CMapEdit(QWidget *parent): QWidget(parent)
# endif
{#ifdef   USE_QMainWindowui = new Ui::MapEditUi_MainWindow;#elseui = new Ui::MapEditUi_Widget;# endifui->setupUi(this);
}CMapEdit::~CMapEdit(){}void CMapEdit::paintEvent(QPaintEvent * event)
{qDebug()<< "paint" << m_iCount++;
}

测试1:

重载mousePressEvent和mouseReleaseEvent 事件,观察这两个事件和paintEvent的先后顺序。
测试结果:

  • 在界面上不断单击,不会触发绘图。
    在这里插入图片描述
  • 先单击桌面,再单击窗口内部:事件顺序:
    - Pressevent
    - 绘图1
    - 绘图2 (任然是触发2次)
    - Releaseevent
    在这里插入图片描述

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

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

相关文章

电源设计如果只看电压跌落,不看电流密度会怎么样?

高速先生成员--黄刚 大家知道&#xff0c;电源直流设计的理论其实非常的简单&#xff0c;归根到底就是欧姆定律&#xff0c;电源芯片给负载供给电流&#xff0c;电流经过传输路径有一定的压降&#xff0c;最终到达负载端的电压值就是我们接收芯片关注的结果。 在PCB设计中&…

新网站收录需要多长时间完成审核

新网站的收录时间因多种因素而异。 一般来说&#xff0c;新上线的网站可能在最快3-7天内被百度收录&#xff0c;尤其是那些有高质量内容的网 然而&#xff0c;通常情况下&#xff0c;新网站的收录可能会在7-15天左右发生。 有些情况下&#xff0c;如果网站的内容足够丰富和有价…

nvm 配置淘宝镜像失效,以及安装node后 npm-v 无效

win11 nvm版本 1.1.4 和1.1.7和1.1.12&#xff08;目前最新版本24年 一月二十三日&#xff09; 以上nvm版本都会出现一下问题&#xff0c; 从https://github.com/coreybutler/nvm-windows/releases 下载nvm安装包如下图 傻瓜式安装后&#xff0c;不用去配置环境变量&#…

【2023】无痕制作钓鱼邮件

当涉及到网络安全和信息保护时&#xff0c;钓鱼攻击一直是备受关注的话题。钓鱼攻击是一种利用社交工程手段欺骗用户&#xff0c;诱使其提供敏感信息或执行恶意操作的攻击方式。它不仅威胁个人用户的隐私和财产安全&#xff0c;也对组织和企业的机密信息构成严重威胁。为了增强…

Linux第35步_在“移植uboot”前安装libncurses5-dev

在“移植uboot”前&#xff0c;需要在Ubuntu中安装“libncurses5-dev”&#xff0c;否则在“编译uboot”时&#xff0c;会报错。目的是保证顺利移植“uboot”。 1、打开终端 2、输入“sudo apt-get install libncurses5-dev bison flex回车”&#xff1b; 3、输入密码“1234…

3W Star 网易云音乐第三方开源 API 仓库因侵权被要求删除

NeteaseCloudMusicApi是一个使用Node.js编写的非官方网易云音乐API&#xff0c;用于获取网易云音乐平台的歌曲信息。该项目是完全开源的&#xff0c;在GitHub上获得了超过3万的star。 根据公开信息&#xff0c;NeteaseCloudMusicApi的主要目的是整理网易云音乐公开的网页接口&a…

Linux逻辑卷创建与扩容

​ 钢铁知识库&#xff0c;一个学习python爬虫、数据分析的知识库。在职运维&#xff0c;又喜欢开发。 什么是lvm逻辑卷 ​ LVM&#xff08;逻辑卷管理&#xff09;是一种在Linux环境中广泛使用的磁盘管理技术。它允许管理员创建逻辑上的磁盘分区&#xff0c;这些分区可以跨越…

node 第二十三天 mongoDB shell 命令 CRUD 增删改查 基础

什么是 mongoDB shell 命令 mongoDB shell 命令就是在cmd窗口或者powershell窗口与mongoDB交互的命令, 以下简称mongosh 对应我们上一天安装的 mongosh 工具 有什么用 mongosh 对一般的开发者可能意义不大, 因为在开发过程中我们会基于某一款语言来使用mongoDB, 比如在node端我…

需求分析的结构化和面向对象方法

需求分析的方法&#xff0c;主要有结构化&#xff08;SA&#xff09;方法、面向对象分析&#xff08;OOA&#xff09;方法。另外有面向问题域的分析(Problem Domain Oriented Analysis&#xff0c;PDOA)方法&#xff0c;还有一些形式化方法例如VDM ( Vienna Design Method)和Z等…

基于cubeMX的正点原子miniSTM32对W25Q64的存储使用

一、实现目标 使用cubeMX建立项目工程&#xff0c;结合正点原子提供的hal库对W25Q64闪存调用的例程&#xff0c;实现W25Q64的读写。 二、实现过程 1、首先建立cubeMX工程&#xff0c;其他项设置不再叙述&#xff0c;只看连接W25Q64的SPI设置&#xff0c;这里使用SPI1&#xf…

阶乘分解《算法竞赛进阶指南》

阶乘分解《算法竞赛进阶指南》 \Huge{阶乘分解《算法竞赛进阶指南》} 阶乘分解《算法竞赛进阶指南》 题目地址&#xff1a;197. 阶乘分解 - AcWing题库 文章目录 题面输入格式输出格式数据范围输入样例&#xff1a;输出样例&#xff1a;样例解释 思路标程 题面 给定整数 N N…

2.1 关系模型的数据结构及形式化定义

2.1.1 关系 单一的数据结构----关系 现实世界的实体以及实体间的各种联系均用关系来表示 。 逻辑结构----二维表 从用户角度&#xff0c;关系模型中数据的逻辑结构是一张二维表 。 建立在集合代数的基础上。 1. 域&#xff08;domain&#xff09; 2. 笛卡儿积&#xff08;C…

RAF(requestAnimationFrame) 和 RIC(requestIdleCallback) 是什么

requestAnimationFrame requestAnimationFrame&#xff1a; 告诉浏览器在下次重绘之前执行传入的回调函数(通常是操纵 dom&#xff0c;更新动画的函数)&#xff1b;由于是每帧执行一次&#xff0c;那结果就是每秒的执行次数与浏览器屏幕刷新次数一样&#xff0c;通常是每秒 60…

layui给table列表添加鼠标悬停title显示

function tablehs() {tabhs table.render({elem: #ta1currentTablehs,id: ta1currentTablehs,url: orderComplaint/uploadlist,height: 300,autoSort: false,//禁用前端自动排序&#xff0c;否则会与数据库返回的数据顺序不一致contentType: application/json,cellMinWidth: 8…

记一次垃圾笔记应用VNote安装失败过程

特色功能简介 1.全文搜索: VNote支持根据关键词搜索整个笔记本或者特定文件夹内的文档内容&#xff0c;非常适合快速找到信息。 2.标签管理: 你可以给笔记添加标签&#xff0c;从而更好地组织和检索你的笔记内容。 3.自定义主题和样式: 进入设置&#xff0c;VNote允许你选…

proxy 代理的接口报错301问题

项目系统里仅仅这个接口报错&#xff0c;反向代理错误导致。 默认情况下&#xff0c;不接受运行在HTTPS上&#xff0c;且使用了无效证书的后端服务器。如果你想要接受&#xff0c;修改配置&#xff1a;secure: false&#xff08;简单意思&#xff1a;如果本地没有进行过https相…

Java中的Date类型字段入到oracle中表后会如何如何展示日期格式

在Oracle数据库中&#xff0c;Date类型字段存储日期和时间信息。当将Java的Date类型字段插入到Oracle表中后&#xff0c;数据库会根据默认的日期格式在查询结果中展示日期。 Oracle数据库的默认日期格式是通过NLS_DATE_FORMAT参数来定义的。如果没有显式地指定日期格式&#x…

Dify学习笔记-手册(三)

1、应用构建及提示词 在 Dify 中&#xff0c;一个“应用”是指基于 GPT 等大型语言模型构建的实际场景应用。通过创建应用&#xff0c;您可以将智能 AI 技术应用于特定的需求。它既包含了开发 AI 应用的工程范式&#xff0c;也包含了具体的交付物。 简而言之&#xff0c;一个应…

管理者想要带领团队达成目标,不妨从以下7个关键处着手

团队执行力是指团队在完成任务和目标方面的效率和能力。团队执行力的高低直接影响着团队的生产力、效益和业绩。因此&#xff0c;提升团队的执行力是每个领导者和管理者的重要任务。以下是一些提升团队执行力的方法&#xff1a; 管理者想要带领团队达成目标&#xff0c;不妨从以…

Linux 一键部署influxd2-telegraf

influxd2前言 influxd2 是 InfluxDB 2.x 版本的后台进程,是一个开源的时序数据库平台,用于存储、查询和可视化时间序列数据。它提供了一个强大的查询语言和 API,可以快速而轻松地处理大量的高性能时序数据。 telegraf 是一个开源的代理程序,它可以收集、处理和传输各种不…