Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Italian
  4. QGraphicsPolygonItem e hoverEnterEvent
Forum Updated to NodeBB v4.3 + New Features

QGraphicsPolygonItem e hoverEnterEvent

Scheduled Pinned Locked Moved Unsolved Italian
1 Posts 1 Posters 521 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • D Offline
    D Offline
    Daniele7826
    wrote on last edited by
    #1

    Buongiorno a tutti,
    come da titolo ho un problema con hoverEnterEvent, quindi vi chiedo un consiglio.
    Questa è la situazione:
    Ho una QMainWindow in cui è presente una QGraphicsView a cui è associata la sua QGraphicsScene. All'interno della QGraphicScene disegno diversi poligoni con una classe derivata da QGraphicsPolygonItem.
    Il mio desiderio è che il poligono riconosca quando il mouse si trova sopra di esso; ho cercato di reimplementare hoverEnterEvent ma senza successo

    void  myPolyItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event){ 
        qDebug()<<"hover mouse";
      QGraphicsPolygonItem::hoverEnterEvent(event);
    }
    

    Qui di seguito una semplice implementazione del programma:
    main.cpp

    myWindow::myWindow(QWidget *parent) : QMainWindow(parent) {
        ui.setupUi(this);
        setMouseTracking(true);
        ui.graphicsViewTavolo->setBackgroundBrush(Qt::white);
        ui.graphicsViewTavolo->setRenderHint(QPainter::Antialiasing);
    
        graphicScene=new QGraphicsScene(ui.graphicsViewTavolo);
        if(graphicScene!=nullptr)
        {
          ui.graphicsViewTavolo->setScene(graphicScene);
          ui.graphicsViewTavolo->setMouseTracking(true);
          ui.graphicsViewTavolo->viewport()->setMouseTracking(true);
    
         int larghezzaCella=60;
         QPoint origineSupSinistro=QPoint(50,50);
         myPolyItem* tempPoly=new myPolyItem();
        //COSTRUISCO UN RETTANGOLO 4X3 INSERENDO I VERTICI DELLE PARETI IN SENSO ANTIORARIO
        tempPoly->addWallPoint(origineSupSinistro);//VERTICE SUPERIORE SINISTRO
        tempPoly->addWallPoint(QPoint(origineSupSinistro.x() , origineSupSinistro.y()+altezzaCella*3)); //VERTICE INFERIORE SINISTRO
        tempPoly->addWallPoint(QPoint(origineSupSinistro.x()+larghezzaCella*4 , origineSupSinistro.y()+altezzaCella*3)); //VERTICE INFERIORE DESTRO
        tempPoly->addWallPoint(QPoint(origineSupSinistro.x()+larghezzaCella*4 , origineSupSinistro.y())); //VERTICE SUPERIORE DESTRO
        tempPoly->addWallPoint(origineSupSinistro);//CHIUSURA
         
                  graphicScene->addItem(tempPoly);
        }
    }
    

    myPolyItem.h

    #ifndef MYPLOYITEM_H
    #define MYPLOYITEM_H
    
    #include <QPainter>
    #include <QGraphicsItem>
    #include <QPainter>
    #include <QBrush>
    #include <QPen>
    #include <QDebug>
    
    
    class myPolyItem : public QGraphicsPolygonItem
    {
    public:
        myPolyItem(QGraphicsItem *parent = nullptr);
        ~myPolyItem();
    
        void    setBackGroundColor(const QColor backgroundColor);
        void   addWallPoint(const QPoint);
    
        void   paint(   QPainter * painter,
                                 const QStyleOptionGraphicsItem * option,
                                QWidget * widget);
    
    protected:
        // overriding mouse events
        void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
        void hoverLeaveEvent(QGraphicsSceneHoverEvent *event);
    
    QVector<QPoint> vectPoint;
    
    };
    
    #endif // MYPLOYITEM_H
    

    myPolyItem.cpp

    myPolyItem::myPolyItem(QGraphicsItem *parent):QGraphicsPolygonItem(parent) {
        colorBackground=QColor(243,116,116);
        setAcceptHoverEvents(true);
        setFlags(QGraphicsItem::ItemIsFocusable | QGraphicsItem::ItemClipsToShape);
    }
    
    void  myPolyItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event){ 
        qDebug()<<"hover mouse";
      QGraphicsPolygonItem::hoverEnterEvent(event);
    }
    
    void   myPolyItem::addWallPoint(const QPoint point){ vectPoint.append(point); }
    
    void  myPolyItem::paint(QPainter * painter, const QStyleOptionGraphicsItem * option,  QWidget * widget){
        QPolygon polygon;
    
        for(int point=0; point<vectPoint.count(); ++point)
        polygon << vectPoint[point];
    
        painter->drawPolygon(polygon, Qt::OddEvenFill);
        painter->fillPath( this->shape(), QBrush(colorBackground) );
    
        QGraphicsPolygonItem::paint(painter, option, widget);
    }
    
    
    1 Reply Last reply
    0

    • Login

    • Login or register to search.
    • First post
      Last post
    0
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Get Qt Extensions
    • Unsolved