• Qt画图


    mainwindow.h

    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    
    #include <QMainWindow>
    #include<QMouseEvent>
    #include<Qpainter>
    #include<QDebug>
    
    QT_BEGIN_NAMESPACE
    namespace Ui { class MainWindow; }
    QT_END_NAMESPACE
    
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    
    public:
        MainWindow(QWidget *parent = nullptr);
        ~MainWindow();
    
    protected:
        // 画图事件
        void paintEvent(QPaintEvent *event);
        // 鼠标按下事件
        void mousePressEvent(QMouseEvent *event);
        // 鼠标移动事件
        void mouseMoveEvent(QMouseEvent *event);
        // 鼠标释放事件
        void mouseReleaseEvent(QMouseEvent *event);
        // 窗口重置事件
        virtual void resizeEvent(QResizeEvent *event) override;
    
    
    private:
        Ui::MainWindow *ui;
        QPixmap pix,temp;
        QPoint lastPoint;
        QPoint endPoint;
        qreal scale;
        bool flag;
    };
    #endif // MAINWINDOW_H

    mainwindow.cpp

    #include "mainwindow.h"
    #include "./ui_mainwindow.h"
    
    MainWindow::MainWindow(QWidget *parent)
        : QMainWindow(parent)
        , ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        QRect geometry = this->geometry();
        int w = geometry.width();
        int h = geometry.height();
        pix = QPixmap(w,h);
        pix.fill(Qt::white);
        flag = false;
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    
    
    void MainWindow::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(flag){
            temp = pix;
            QPainter ppainter(&temp);
            ppainter.drawRect(x,y,w,h);
            painter.drawPixmap(0,0,temp);
        }else{
            QPainter ppainter(&pix);
            ppainter.drawRect(x,y,w,h);
            painter.drawPixmap(0,0,pix);
        }
    }
    
    void MainWindow::mousePressEvent(QMouseEvent *event){
        if(event->button()==Qt::LeftButton){
            lastPoint = event->pos();
            flag = true;
        }
    
    }
    
    void MainWindow::mouseMoveEvent(QMouseEvent *event){
        if(event->button()&Qt::LeftButton){
            endPoint = event->pos();
            update();
        }
    
    }
    
    void MainWindow::mouseReleaseEvent(QMouseEvent *event){
        if(event->button()==Qt::LeftButton){
            endPoint = event->pos();
            flag = false;
            update();
        }
    }
    
    void MainWindow::resizeEvent(QResizeEvent *){
        QRect geometry = this->geometry();
        int w = geometry.width();
        int h = geometry.height();
        pix = QPixmap(w,h);
        pix.fill(Qt::white);
    }
    

      

      

  • 相关阅读:
    爬虫的基本原理
    爬虫的分类
    gcc编译
    C++字符串总结
    PE文件格式学习笔记
    学习SDR过程中的参考网页
    Linux下源码编译安装遇到的问题
    web | jsp考试复习要点整理
    爬虫 | php封装 | file_get_contents
    re | [NPUCTF2020]EzObfus-Chapter2
  • 原文地址:https://www.cnblogs.com/navysummer/p/14239962.html
Copyright © 2020-2023  润新知