Qt 多次绘图

发布时间:2024年01月23日

使用Qt 的时候发现:

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

于是开始了如下的测试:

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

在这里插入图片描述

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

代码

我的代码有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++;
}

文章来源:https://blog.csdn.net/qq_43110298/article/details/135777972
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。