kann sich einer mal dieses Beispiel anschauen und mir evtl. sagen was ich falsch mache? Ich möchte einfach nur, dass das Objekt rot wird, wenn die Maus darüber ist, aber wenn man sich mit der Maus von links oder oben nähert wird es schon viel früher rot. Ich nutze Qt 4.7.4.
Danke!
Code: Alles auswählen
class myRectItem : public QGraphicsItem
{
public:
myRectItem(qreal x, qreal y, qreal w, qreal h): m_hovered(false)
{
setRect(QRectF(x,y,w,h));
setAcceptHoverEvents(true);
}
virtual QRectF boundingRect() const {return m_rectangle;}
virtual void paint(QPainter * painter,
const QStyleOptionGraphicsItem *, QWidget *)
{
QBrush b = QBrush(Qt::green);
if (m_hovered)
b.setColor(Qt::red);
painter->setBrush(b);
painter->drawRect(m_rectangle);
}
void setRect(const QRectF &rect) {prepareGeometryChange();m_rectangle=rect;}
protected:
virtual void hoverEnterEvent(QGraphicsSceneHoverEvent*)
{m_hovered=true;update();}
virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent*)
{m_hovered=false;update();}
private:
bool m_hovered;
QRectF m_rectangle;
};
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
QGraphicsScene* scene = new QGraphicsScene(0,0,25,25);
scene->addItem(new myRectItem(10,10,5,5));
QGraphicsView* view = new QGraphicsView();
view->setScene(scene);
view->scale(32,32);
setCentralWidget(view);
}