QGraphicsPolygonItem e hoverEnterEvent
Unsolved
Italian
-
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 successovoid myPolyItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event){ qDebug()<<"hover mouse"; QGraphicsPolygonItem::hoverEnterEvent(event); }
Qui di seguito una semplice implementazione del programma:
main.cppmyWindow::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); }