Solved Modifica da QGraphicsItem a QGraphicsObject
-
Dovendo utilizare i Signals & Slots all'interno di una mia classe di tipo QGraphicsItem sono stato costretto a modificarla in QGraphicsObject.
Il passaggio è stato relativamente indolore ma adesso la funzione che mi cattura l'evento on click non mi funziona più a causa di un cast. Potreste aiutarmi a risolvere il problema?Vecchio modo funzionante:
void TestHoverItem::mousePressEvent(QGraphicsSceneMouseEvent *e) { m_mouseIsDown = true; QGraphicsItem::mousePressEvent(e); QPoint point = e->scenePos().toPoint(); auto sceneTop = scene(); QGraphicsItem *item = sceneTop->itemAt(point.x(), point.y(),QTransform()); TestHoverItem *hover = qgraphicsitem_cast<TestHoverItem *>(item); qDebug() << "Identificatore" << QString::number(hover->getIdentifier()); qDebug() << "Punto X" << QString::number(hover->x()); qDebug() << "Punto Y" << QString::number(hover->y()); update(); }
Adesso invece è:
void TestHoverItem::mousePressEvent(QGraphicsSceneMouseEvent *e) { m_mouseIsDown = true; QGraphicsObject::mousePressEvent(e); QPoint point = e->scenePos().toPoint(); auto sceneTop = scene(); QGraphicsObject *item = sceneTop->itemAt(point.x(), point.y(),QTransform()); TestHoverItem *hover = <TestHoverItem *>(item); qDebug() << "Id" << QString::number(hover->getIdPuntoDiMisurazioneTeorico()); qDebug() << "Codice" << QString::number(hover->getIdentifier()); qDebug() << "Punto X" << QString::number(hover->x()); qDebug() << "Punto Y" << QString::number(hover->y()); update(); } Però la funzione itemAt ritorna un QGraphicItem e ovviamente il compilatore mi segnala errore. Come potrei ovviare al problema?
-
Alla fine mi è bastato estendere la classe con public QObject.
La prima volta non mi funzionava perchè afficnhè la modifica avesse effetto ho dovuto rebuildare tutto.