Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

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.


Log in to reply