zoukankan      html  css  js  c++  java
  • Qt绘图面板中的对象拖拽

    Qt绘图面板中的对象拖拽

    qdrawwidget.h

    #ifndef QDRAWWIDGET_H
    #define QDRAWWIDGET_H
    
    #include <QObject>
    #include <QWidget>
    #include <QFrame>
    #include <QPainter>
    #include <QMouseEvent>
    #include <QDebug>
    
    class QDrawWidget : public QWidget
    {
        Q_OBJECT
    public:
        explicit QDrawWidget(QWidget *parent = nullptr);
    
        void drawGrid();
    
    protected:
        void paintEvent(QPaintEvent *);
    
        void mousePressEvent(QMouseEvent *event);
        void mouseReleaseEvent(QMouseEvent *event);
        void mouseMoveEvent(QMouseEvent *event);
    
    signals:
    
    public slots:
    
    private:
        int win_width=0;
        int win_height = 0;
    
         //QPainter painter;
    
        int startX = 0;
        int startY = 0;
        int endX = 0;
        int endY = 0;
    
        int totalX=0;
        int totalY=0;
    
        int rect1_x = 122;
        int rect1_y = 122;
    
        int rect2_x = 522;
        int rect2_y = 122;
    
        int rect3_x = 922;
        int rect3_y = 122;
    
    };
    
    #endif // QDRAWWIDGET_H

    qdrawwidget.cpp

    #include "qdrawwidget.h"
    
    QDrawWidget::QDrawWidget(QWidget *parent) : QWidget(parent)
    {
    
        win_width = this->geometry().width();
        win_height = this->geometry().height();
    
        this->setStyleSheet("border:2px solid red;");
    
    
    
    
    }
    
    
    
    void QDrawWidget::drawGrid()
    {
        //repaint();
        update();
    }
    
    
    
    
    void QDrawWidget::paintEvent(QPaintEvent *)
    {
        
    
        int s_x = endX-startX;
        int s_y = endY-startY;
    
    
    
        //totalX = totalX+s_x;
        //totalY = totalY+s_y;
    
        totalX = s_x;
        totalY = s_y;
    
        rect1_x=rect1_x+s_x;
        rect1_y=rect1_y+s_y;
    
        rect2_x=rect2_x+s_x;
        rect2_y=rect2_y+s_y;
    
        rect3_x=rect3_x+s_x;
        rect3_y=rect3_y+s_y;
    
        //qDebug()<<""<<rect1_x<<"       "<<rect1_y<<"    "<<rect2_x<<"       "<<rect2_y<<"     "<<s_x<<"       "<<s_y;
        qDebug()<<""<<rect1_x<<"       "<<rect1_y<<"    "<<"     "<<s_x<<"       "<<s_y;
    
    
    
        int win_width = this->geometry().width();
        int win_height = this->geometry().height();
    
        QPainter painter(this);
    
        qDebug()<<"win size:"<<win_width<<"   "<<win_height;
    
    
    
        for(int x=0;x<win_width;x+=25)
        {
            painter.drawLine(QPoint(x,1),QPoint(x,win_height));
        }
    
        for(int y = 0;y<win_height;y+=25)
        {
            painter.drawLine(QPoint(1,y),QPoint(win_width,y));
        }
    
    
        QColor color_red(255,0,0);//设置颜色
        QPen pen1(color_red);//定义画笔
        pen1.setWidth(6);
        painter.setPen(pen1);
        painter.drawRect(rect1_x,rect1_y,200,200);//绘制矩形
    
        QColor color_green(0,255,0);//设置颜色
        QPen pen2(color_green);//定义画笔
        pen2.setWidth(4);
        painter.setPen(pen2);
        painter.drawRect(rect2_x,rect2_y,200,200);//绘制矩形
    
    
        QColor color_yellow(0,150,255);//设置颜色
        QPen pen3(color_yellow);//定义画笔
        pen3.setWidth(4);
        painter.setPen(pen3);
        painter.drawRect(rect3_x,rect3_y,200,200);//绘制矩形
    
        /*
        startX=0;
        startY=0;
        endX=0;
        endY=0;
        */
    
        startX = endX;
        startY = endY;
    
    
    }
    
    
    void QDrawWidget::mousePressEvent(QMouseEvent *event)
    {
    
        if(event->button() == Qt::LeftButton)
        {
            //int x = this->pos().x();
            //int y = this->pos().y();
            int x = event->windowPos().x();
            int y = event->windowPos().y();
            startX = x;
            startY = y;
    
    
            qDebug()<<"p: "<<x<<"   "<<y;
        }
    
    }
    
    void QDrawWidget::mouseMoveEvent(QMouseEvent *event)
    {
    
        if(event->buttons() & Qt::LeftButton)
        {
            int x = event->windowPos().x();
            int y = event->windowPos().y();
    
            endX = x;
            endY = y;
            qDebug()<<"m: "<<x<<"   "<<y;
    
            update();
        }
    
    
    }
    
    void QDrawWidget::mouseReleaseEvent(QMouseEvent *event)
    {
        if(event->button() == Qt::LeftButton)
        {
            int x = event->windowPos().x();
            int y = event->windowPos().y();
    
            endX = x;
            endY = y;
            qDebug()<<"r: "<<x<<"   "<<y;
        }
    
        update();
    }
    
    
    //////////////////

    ############################3

    QQ 3087438119
  • 相关阅读:
    深入正则表达式(0):正则表达式概述
    讲透学烂二叉树(二):图中树的定义&各类型树的特征分析
    讲透学烂二叉树(一):图的概念和定义—各种属性特征浅析
    Gzip之后继者Brotli浅析之CDN厂商的智能压缩,服务器Brotli设置
    ECMAScript进化史(1):​话说Web脚本语言王者JavaScript的加冕历史
    nginx网站限速限流配置——网站被频繁攻击,nginx上的设置limit_req和limit_conn
    linux添加用户,修改用户密码,修改用户权限,设置root用户操作
    nginx 限制ip访问,禁止非法域名指向本机ip——防止被别人绑定域名到自己IP的方法
    centos8 新增ssh自定义端口与屏蔽默认22端口。
    1g云主机升级centos8不满足centos 8 至少2g内存要求,linux虚拟内存来凑
  • 原文地址:https://www.cnblogs.com/herd/p/14724808.html
Copyright © 2011-2022 走看看