En cuanto al segundo caso no sé exactamente cuál es el problema, a mí me funciona bien sin hacer click, te dejo un ejemplo similar a ver si puedes ver cual es tu problema. Saludos.
Código C++:
Ver original#include <QDebug>
#include <QGraphicsItem>
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QGraphicsSceneMouseEvent>
#include <QGraphicsEllipseItem>
class xcircle : public QGraphicsEllipseItem {
public:
explicit xcircle(QGraphicsItem* parent = nullptr) : QGraphicsEllipseItem(parent) {
setAcceptHoverEvents(true);
setPen(QPen(Qt::green, 3, Qt::SolidLine));
setRect(40,40,100,100);
}
private:
void hoverEnterEvent(QGraphicsSceneHoverEvent *event) {
setPen(QPen(Qt::yellow, 3, Qt::SolidLine));
qDebug()<<"Cambio a amarillo";
QGraphicsItem::hoverEnterEvent(event);
}
void hoverLeaveEvent(QGraphicsSceneHoverEvent *event){
setPen(QPen(Qt::green, 3, Qt::SolidLine));
qDebug()<<"Cambio a verde";
QGraphicsItem::hoverLeaveEvent(event);
}
};
class xscene : public QGraphicsScene {
public:
explicit xscene(QWidget * parent = nullptr) : QGraphicsScene(parent) {
ui_circle = new xcircle();
addItem(ui_circle);
}
private:
xcircle* ui_circle;
};
class widget : public QGraphicsView
{
Q_OBJECT
public:
explicit widget(QWidget* parent = nullptr) : QGraphicsView(parent) {
setMouseTracking(true);
myScene = new xscene(this);
setScene(myScene);
}
private:
xscene* myScene;
};