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

最终总结
在经过多次实验后发现:如果你的鼠标在应用和桌面来回点击切换(不是在只应用中点),则:
- 其实和主类别所继承的类型、ui的类型以及是否使用手写都无关
- 在Qt creator 的默认项目,如果页面上没有任何东西,则主页面的调用次数为1
- 如果页面上有任何控件,无论控件数量的多少,都为2
相关文章:
Qt 多次绘图
使用Qt 的时候发现: 背景:自己定义一个类,把它和某个ui文件绑定。(类似 Qt creator 默认创建的工程)问题:当鼠标在窗口内单击的时候会触发2次绘图。?难道不应该是一次吗? 于是开始了如下的测试…...
设计模式介绍
概念: 设计模式是一套被反复使用的、多数人知晓、经过分类编目的优秀代码设计经验的总结。特定环境下特定问题的处理方法。 1)重用设计和代码 重用设计比重用代码更有意义,自动带来代码重用 2)提高扩展性 大量使用面向接口编程&…...
linux 之 ln 命令
linux 之 ln 命令 在Linux中,ln 命令用于创建文件或目录的链接。它有两种主要类型的链接。 硬链接(Hard Links) 硬链接实际上是原始文件的另一个引用,指向同一个inode(索引节点),这意味着它们共…...
【设计模式】张一鸣笔记:责任链接模式怎么用?
我将通过一个贴近现实的故事——请假审批流程,带你了解和掌握责任链模式。 什么是责任链模式? 责任链模式是一种行为设计模式,它让你可以避免将请求的发送者与接收者耦合在一起,让多个对象都有处理请求的机会将这个对象连成一条…...
Vulnhub-dc4
靶场下载 https://download.vulnhub.com/dc/DC-4.zip 信息收集 判断目标靶机的存活地址: # nmap -sT --min-rate 10000 -p- 192.168.1.91 -oN port.nmap Starting Nmap 7.94 ( https://nmap.org ) at 2024-01-21 16:36 CST Stats: 0:00:03 elapsed; 0 hosts completed (1 up…...
MySQL45道练习题
作业需要数据表SQL语句已给 1. 查询" 01 "课程比" 02 "课程成绩高的学生的信息及课程分数 select * from Student RIGHT JOIN (select t1.SId, class1, class2 from(select SId, score as class1 from sc where sc.CId 01)as t1, (select SId, score as …...
HTML5和CSS3的新特性
HTML5的新特性主要是针对于以前的不足,增加了一些新的标签、新的表单和新的表单属性等 1,HTML5新增的语义化标签 <header> 头部标签 <nav> 导航标签 <article> …...
【MySQL】表列数和行大小限制详解
目录 限制维度 列数量限制 表的最大行大小 单个列的存储要求 存储引擎的附加限制 功能键部分 行容量限制 MySQL表的内部实现 InnoDB表的最大行大小 超出InnoDB最大行大小的处理 不同存储格式的影响 限制示例 行大小限制示例 InnoDB下 MyISAM下 InnoDB变长情况示…...
算法基础学习|双指针算法
双指针算法 代码模板 for (int i 0, j 0; i < n; i ){while (j < i && check(i, j)) j ;// 具体问题的逻辑 } 常见问题分类:(1) 对于一个序列,用两个指针维护一段区间(2) 对于两个序列,维护某种次序,比如归并…...
4.远程登录服务
目录 1. 简介 1.1. 概念 1.2. 功能: 1.3. 分类 1.3.1. 文字接口: 1.3.2. 图形接口: 1.4. 文字接口连接服务器: 2. 连接加密技术简介 2.1. 密钥解析: 3. SSH工作过程: 3.1. 版本协商阶段 3.2. 密钥和算法协商阶段 3.3. 认证阶段(两…...
代码随想录算法训练营第二十九天| 491.递增子序列、46.全排列、47.全排列 II
491.递增子序列 题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 解题思路:同层相同元素要跳过 java: class Solution {List<List<Integer>> resultnew ArrayList<>();List<Integ…...
基于若依的ruoyi-nbcio流程管理系统一种简单的动态表单模拟测试实现(五)
更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码: https://gitee.com/nbacheng/n…...
多场景建模:阿里多场景多任务元学习方法M2M
multi-scenario multi-task meta learning approach (M2M) 背景 广告领域大部分是针对用户建模的,像点击率预估,很少有针对广告主需求建模(广告消耗预估、活跃率/流失率预估、广告曝光量预估),广告的类型较多&#x…...
仿真机器人-深度学习CV和激光雷达感知(项目2)day03【机器人简介与ROS基础】
文章目录 前言机器人简介机器人应用与前景机器人形态机器人的构成 ROS基础ROS的作用和特点ROS的运行机制ROS常用命令 前言 💫你好,我是辰chen,本文旨在准备考研复试或就业 💫本文内容是我为复试准备的第二个项目 💫欢迎…...
【多商户开源-BSD- Fecmall 电商平台】
关于Fecmall Fecmall 关于,Fecmall介绍 Fecbbc开源BSD多商户系统,真正开源,商用免费授权的多商户系统 Fecmall系统简介: 全称为Fancy ECommerce Shop, 着重于电商架构的研发优化,全新定义商城的架构体系&…...
2023春秋杯冬季赛 --- Crypto wp
文章目录 前言Cryptonot_wiener 前言 比赛没打,赛后随便做一下题目 Crypto not_wiener task.py: from Crypto.Util.number import * from gmpy2 import * import random, os from hashlib import sha1 from random import randrange flagb x bytes_to_long(f…...
ImageMagick使用手册
ImageMagick使用手册 文章目录 ImageMagick使用手册ImageMagick是什么指令总结1.查看版本2.官网验证指令解读3.svg转png4.png转ico5.将指定文件夹中的所有PNG图像转换为ICO图标 本教程持续更新,我学到多少就更新多少。关于ffmpeg如何安装可以看上一篇博客win系统环境…...
嵌入式培训机构四个月实训课程笔记(完整版)-C++和QT编程第五天-Qt编程技巧若干解答(物联技术666)
链接:https://pan.baidu.com/s/1-u7GvgM0TLuiy9z7LYQ80Q?pwd1688 提取码:1688 QT在Windows下制作图表 QT是跨平台的程序设计库,在windows下的程序往往想要有一个好看的图标,方法如下: 1.准备个ICO图标。例如&…...
【蓝桥杯选拔赛真题59】python小写字母 第十五届青少年组蓝桥杯python 选拔赛比赛真题解析
目录 python小写字母 一、题目要求 1、编程实现 2、输入输出...
代码随想录算法训练营Day37|738.单调递增的数字、贪心算法总结
目录 738.单调递增的数字 方法一:暴力解法 方法二:贪心解法 贪心算法总结 738.单调递增的数字 题目链接 文章链接 方法一:暴力解法 class Solution { private:// 各位递增判断函数bool checkNum(int num) {int max 10;while (num) {int …...
3分钟打造个性化英雄联盟体验:LeaguePrank工具让段位展示彻底自定义
3分钟打造个性化英雄联盟体验:LeaguePrank工具让段位展示彻底自定义 【免费下载链接】LeaguePrank 项目地址: https://gitcode.com/gh_mirrors/le/LeaguePrank 你是否曾想在好友面前展示独特的游戏段位?是否希望自己的游戏生涯页面与众不同&…...
【仅限首批内测用户开放】Polars 2.0清洗性能调优白皮书:含12个未公开API、3类CPU亲和性绑定策略
第一章:Polars 2.0大规模数据清洗技巧概览Polars 2.0 在性能、内存效率与API一致性上实现重大升级,为TB级结构化数据清洗提供了低延迟、高吞吐的原生解决方案。其基于Arrow 15的列式引擎、零拷贝切片能力及多线程LazyFrame执行计划优化,使复杂…...
GitHub自动化神器:用Cursor+Firecrawl实现项目自更新(避坑指南)
GitHub自动化神器:用CursorFirecrawl实现项目自更新(避坑指南) 在开源项目的日常维护中,重复性的更新工作往往消耗开发者大量精力。有没有一种方法,能让项目像拥有自我意识般自动完成内容搜集、代码生成甚至PR提交&am…...
3步快速设置Windows任务栏透明美化:TranslucentTB新手完整指南
3步快速设置Windows任务栏透明美化:TranslucentTB新手完整指南 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 想要让Windows…...
Qwen3-VL-8B-Instruct-GGUF效果分享:100张用户实测图平均响应时间<1.8s(A10 GPU)
Qwen3-VL-8B-Instruct-GGUF效果分享:100张用户实测图平均响应时间<1.8s(A10 GPU) 1. 模型效果实测:速度与精度的双重惊喜 当我第一次看到Qwen3-VL-8B-Instruct-GGUF的测试结果时,确实被惊艳到了。这个模型在A10 G…...
基于python框架的船舶物流运输管理系统设计vue
目录船舶物流运输管理系统功能分析(Vue前端)用户管理模块船舶管理功能运输订单管理路径优化模块实时监控看板报表分析功能移动端适配系统集成接口技术栈建议项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合…...
ComfyUI-VideoHelperSuite:AI视频工作流的全栈解决方案
ComfyUI-VideoHelperSuite:AI视频工作流的全栈解决方案 【免费下载链接】ComfyUI-VideoHelperSuite Nodes related to video workflows 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-VideoHelperSuite 1. 核心价值解析:图像序列到视频的…...
手把手调试Linux DRM:如何用ftrace和debugfs深入connector的生命周期
深入Linux DRM调试:用ftrace与debugfs剖析connector全生命周期 当一块崭新的显示板卡接入系统时,DRM驱动中的connector如同一位尽职的接线员,负责建立显示设备与内核之间的通信桥梁。但在实际开发中,我们常会遇到热插拔检测失灵、…...
深入解析DHT11单总线通信:如何通过时序控制实现稳定数据传输?
1. DHT11单总线通信的基本原理 第一次用DHT11传感器时,我被它只用一根线就能传数据惊到了。这就像两个人打电话,不需要复杂的线路,只要一根电话线就能聊天气温湿度。DHT11采用的单总线协议(1-Wire Protocol)就是这样一…...
SAM 3实操手册:分割掩码生成STL网格用于3D打印前处理
SAM 3实操手册:分割掩码生成STL网格用于3D打印前处理 1. 引言 你是否遇到过这样的问题:想要3D打印一个实物,但手头只有一张照片?或者想要从复杂的背景中提取出特定物体进行三维重建?传统的方法需要手动抠图、建模&am…...
