• Qt 实现涂鸦板三:实现鼠标绘制矩形


    .h 文件

    #pragma once
    
    #include <QtWidgets/QWidget>
    #include "ui_xuexi.h"
    
    #include "QMouseEvent"
    #include "QKeyEvent"
    #include "QPainter"
    
    class xuexi : public QWidget
    {
        Q_OBJECT
    
    public:
        xuexi(QWidget *parent = Q_NULLPTR);
    
        void mousePressEvent(QMouseEvent*e);        // 按下
        void mouseMoveEvent(QMouseEvent*e);         // 移动
        void mouseReleaseRvent(QMouseEvent*e);      // 释放
    
        void paintEvent(QPaintEvent* );
         
    
    private:
        Ui::xuexiClass ui;
    
        QPixmap pix;
        QPoint lastPoint;
        QPoint endPoint;
    
        QPixmap tempPix;
        bool isDrawing;                             // 标志是否在绘图
    };

    .cpp 文件

    #include "xuexi.h"
    
    xuexi::xuexi(QWidget *parent)
        : QWidget(parent)
    {
        ui.setupUi(this);
    
        resize(600, 500);
        pix = QPixmap(400, 400);
        pix.fill(Qt::white);
    
        isDrawing = false;
    }
    
    void xuexi::mousePressEvent(QMouseEvent*e)
    {
        if (e->button() == Qt::LeftButton)
        {
            lastPoint = e->pos();
            isDrawing = true;
        }
    }
    
    void xuexi::mouseMoveEvent(QMouseEvent*e)
    {
        if (e->buttons() == Qt::LeftButton)
        {
            endPoint = e->pos();
            update();
        }
    }
    
    void xuexi::mouseReleaseRvent(QMouseEvent* e)
    {
        if (e->button() == Qt::LeftButton)
        {
            endPoint = e->pos();
            isDrawing = false;
            update();
        }
    }
    
    void xuexi::paintEvent(QPaintEvent*)
    {
        int x, y, w, h;
        x = lastPoint.x();
        y = lastPoint.y();
        w = endPoint.x() - x;
        h = endPoint.y() - y;
        
        QPainter painter(this);
        if (isDrawing)
        {
            tempPix = pix;
            QPainter pp(&tempPix);
            pp.drawRect(x, y, w, h);
            painter.drawPixmap(0, 0, tempPix);
        }
        else
        {
            QPainter pp(&pix);
            pp.drawRect(x, y, w, h);
            painter.drawPixmap(0, 0, pix);
        }
        
    
    }
  • 相关阅读:
    推荐一套 Spring Boot 快速开发框架,接私活、练手必备!
    C# 三种字节数组(byte[])拼接的性能对比测试
    C#//字节数组转16进制字符串
    C# 16进制与字符串、字节数组之间的转换
    linux脚本学习
    ubuntu12.04纪事
    linux常用命令
    linshi
    2022壬寅年天干四化
    码农们来一起讨论下数据库设计....
  • 原文地址:https://www.cnblogs.com/shiyixirui/p/15511176.html
Copyright © 2020-2023  润新知