Qt 多次绘图

这篇具有很好参考价值的文章主要介绍了Qt 多次绘图。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用Qt 的时候发现:

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

于是开始了如下的测试:

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

Qt 多次绘图,qt,c++
简述主要实验结果:

  • 如果不使用 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_QMainWindow
    class CMapEdit : public QMainWindow
#else
    class CMapEdit : public QWidget
#endif
{
    Q_OBJECT

public:
    CMapEdit(QWidget *parent = nullptr);

    ~CMapEdit();

    void paintEvent(QPaintEvent *);

public:
    static int m_iCount;

    #ifdef USE_QMainWindow
        Ui::MapEditUi_MainWindow   *ui = nullptr;
    #else
        Ui::MapEditUi_Widget       *ui = nullptr;
    #endif
};
#endif // CMAPEDIT_H

cmapedit.cpp

#include "cmapedit.h"
#include <QDebug>

int CMapEdit::m_iCount = 1;

#ifdef inherit_QMainWindow
    CMapEdit::CMapEdit(QWidget *parent): QMainWindow(parent)
#else
    CMapEdit::CMapEdit(QWidget *parent): QWidget(parent)
# endif
{
    #ifdef   USE_QMainWindow
        ui = new Ui::MapEditUi_MainWindow;
    #else
        ui = new Ui::MapEditUi_Widget;
    # endif
    
    ui->setupUi(this);
}

CMapEdit::~CMapEdit(){}

void CMapEdit::paintEvent(QPaintEvent * event)
{
    qDebug()<< "paint" << m_iCount++;
}

测试1:

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

  • 在界面上不断单击,不会触发绘图。
    Qt 多次绘图,qt,c++
  • 先单击桌面,再单击窗口内部:事件顺序:
    - Pressevent
    - 绘图1
    - 绘图2 (任然是触发2次)
    - Releaseevent
    Qt 多次绘图,qt,c++

最终总结

在经过多次实验后发现:如果你的鼠标在应用和桌面来回点击切换(不是在只应用中点),则:文章来源地址https://www.toymoban.com/news/detail-820609.html

  • 其实和主类别所继承的类型、ui的类型以及是否使用手写都无关
  • 在Qt creator 的默认项目,如果页面上没有任何东西,则主页面的调用次数为1
  • 如果页面上有任何控件,无论控件数量的多少,都为2

到了这里,关于Qt 多次绘图的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • QT--Opencv绘图

    提示:本文为学习内容,若有错误,请联系作者,谦虚受教。 只要来日可期,今天就值得欣喜。 img:您要绘制形状的图像 color:形状的颜色。对于BGR,将其作为元组传递,例如:(255,0,0)对于蓝色。对于灰度, 只需传递标量值即可。 厚度:线或圆等的粗细。如果对闭合图形(

    2024年02月13日
    浏览(38)
  • Qt高级绘图

    在这篇文章中,我们将会介绍Qt中的高级绘制技术,并了解如何使用它们来实现自定义的绘制和渲染。Qt提供了一些专业级别的API来进行绘图操作,可以创建矢量图形或者像素颜色(bitmap)图形。 Qt中最常用的绘制API是QPainter类。它可以用于将几何形状、图像和文本等内容绘制

    2024年02月15日
    浏览(35)
  • (14)Qt绘图(one)

    目录 绘图的基本使用 绘图的流程 指定绘图设备的两种方式 QPen的使用 线条样式 笔帽样式 线条连接样式 QBrush的使用 画刷样式设置 Qt中的随机数的使用 填充规则 纹理填充(图片填充) 渐变填充 线性渐变 径向渐变 锥形渐变 渐变区域之外的渐变样式(以线性渐变为例) 预定

    2024年02月14日
    浏览(25)
  • QT—3D绘图

    OpenGL是一个跨平台的、用来渲染3D图形的标准API,Qt对OpenGL提供了强大的支持。Qt4时代的QtOpenGL模块在Qt5中已经不再建议使用,OpenGL相关的类被移到了Qt GUI模块。Qt Widgets模块中的QOpenGLWidget类提供了一个可以渲染OpenGL图形的部件,通过该部件可以轻松地将OpenGL图形整合到Qt应用程序

    2023年04月08日
    浏览(31)
  • Qt实时波形绘图(使用QCustomPlot)

    目录 前言 一、Qt是什么? 二、QCustomPlot是什么? 三、Qt实时波形绘图         3.1 开发环境和工具         3.2 实时波形绘图控件 3.2.1 界面设计及功能 3.2.2 如何使用该控件 总结         我们在涉及或调试设备时,通常需要查看过程数据,以便了解设备的运行情况

    2024年02月08日
    浏览(37)
  • Qt学习(一)-------- 定时器、绘图

    1.定时器 QTimer    ⭐  创建定时器对象  QTimer *timer = new QTimer(this);    ⭐ 启动定时器 timer-start(毫秒);    ⭐ 监听信号 connect(timer,QTimer::timeout,[=](){     }); -----------------------------------------------------------例子-----------------------------------------------------------     ⭐ 点击暂停,实现

    2024年02月03日
    浏览(42)
  • Qt 基于海康相机的视频绘图

    需求 在视频窗口上进行绘图,包括圆,矩形,扇形等 效果 :  思路: 自己取图然后转成QImage ,再向QWidget 进行渲染,根据以往的经验,无法达到很高的帧率。因此决定使用相机SDK自带的渲染功能,也就是传一个句柄给到sdk。但是这样视频渲染出来了,向上绘制图案,会被视

    2024年02月04日
    浏览(36)
  • QT上位机开发(键盘绘图控制)

    【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】         绘图是qt很基础的一个功能。通常,我们进行qt绘图的时候,一般会先创建一个qt view,这个相当于视图。接着创建一个场景scene,场景和视图是一对多的关系,比如相同的场景可以正着

    2024年01月25日
    浏览(40)
  • QT 绘图与重绘事件

    代码实现仪表盘 .cpp .h 现象  

    2024年01月19日
    浏览(32)
  • 【Qt】四种绘图设备详细使用

    绘图设备是指继承QPainterDevice的子类—QPixmap QImage QPicture QBitmap(黑白图片) QBitmap ——父类QPixmap QPixmap图片类,主要用来显示,它针对于显示器显示做了特殊优化, 依赖于平台 的, 只能在主线程中使用 (UI线程)如果要在界面显示图片 ,优先选择QPixmap类,只能在主线程 - QImage图片

    2024年03月13日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包