Tracking mouse move in QGraphicsScene class

后端 未结 2 856
栀梦
栀梦 2021-02-18 15:36

I subclassed QGraphicsScene and added method mouseMoveEvent to handle mouse move event. I created a ruler on top of GraphicsView and have the ruler tracking mouse movement. In t

2条回答
  •  悲&欢浪女
    2021-02-18 16:04

    I've been asking, and in some place found some useful information, and testing write this:

    tgs.cpp:

    #include 
    #include "tgs.h"
    #define _alto  300
    #define _ancho 700
    #include 
    
    TGs::TGs(QObject *parent)
        :QGraphicsScene(parent)
    { // Constructor of Scene
        this->over = false;
    }
    
    void TGs::drawBackground(QPainter *painter, const QRectF &rect)
    {
    
    #define adjy 30
    #define adjx 30
    
        int j = 0;
        int alto = 0;
    
        QPen pen;
        pen.setWidth(1);
        pen.setBrush(Qt::lightGray);
        painter->setPen(pen);   
    
        painter->drawText(-225, 10, this->str);
        alto = _alto;  // 50 + 2
    
        for(int i = 0; i < alto; ++i)
        {
            j = i * adjy - 17;
    
            painter->drawLine(QPoint(-210, j), QPoint(_ancho, j));
        }
    
        for(int i = 0; i < 300; ++i)
        {
            j = i * adjx - 210;
    
            painter->drawLine(QPoint(j, 0), QPoint(j, _ancho * 2));
        }
    }
    
    void TGs::mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent)
    {
        QString string = QString("%1, %2")
                   .arg(mouseEvent->scenePos().x())
                  .arg(mouseEvent->scenePos().y()); // Update the cursor position text
        this->str = string;
        this->update();
    }
    
    void TGs::mousePressEvent(QGraphicsSceneMouseEvent *event)
    {
        this->update();
    }
    
    void TGs::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
    {
        this->update();
    }
    

    tgs.h:

    #ifndef TGS_H
    #define TGS_H
    
    #include 
    #include 
    #include 
    #include 
    
    QT_BEGIN_NAMESPACE
    
    class QGraphicsSceneMouseEvent;
    class QMenu;
    class QPointF;
    class QGraphicsLineItem;
    class QFont;
    class QGraphicsTextItem;
    class QColor;
    
    QT_END_NAMESPACE
    
    class TGs : public QGraphicsScene
    {
    public:
        TGs(QObject *parent = 0);
    
    public slots:
        void drawBackground(QPainter *painter, const QRectF &rect);
        void mouseMoveEvent(QGraphicsSceneMouseEvent * mouseEvent);
        void mousePressEvent(QGraphicsSceneMouseEvent *event);
        void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
    
        bool over;
        QString str;
        QGraphicsTextItem cursor;
    };
    
    #endif // TGS_H
    

提交回复
热议问题