virtual void hoverLeaveEvent ( QGraphicsSceneHoverEvent * event )
重新编译后,可以获取到鼠标离开item范围的消息,但我需要知道按下左键并移动的范围,鼠标的坐标点对我来说很重要。简化代码后,就只剩下下面一点点了,高手看看哪里的问题,谢谢!
代码如下:
view类
MyGraphView::MyGraphView(QWidget *parent): QGraphicsView(parent)
{
QGraphicsScene *scene = new QGraphicsScene(this);
scene->setItemIndexMethod(QGraphicsScene::NoIndex);
scene->setSceneRect(0, 0, 800, 480);
setScene(scene);
setCacheMode(CacheBackground);
setViewportUpdateMode(BoundingRectViewportUpdate);
setRenderHint(QPainter::Antialiasing);
setTransformationAnchor(AnchorUnderMouse);
setFixedSize(800, 480);
setFrameShape(QFrame::NoFrame);
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setMouseTracking(true);
centerNode = new MyItem(this);
scene->addItem(centerNode);
centerNode->setPos(100, 100);
}
item类
MyItem::MyItem(MyGraphView *graphWidget)
: graph(graphWidget)
{
setFlag(ItemIsSelectable);
setFlag(ItemSendsGeometryChanges);
setCacheMode(DeviceCoordinateCache);
m_enStatus = enNormal;
}
void MyItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *)
{
painter->drawEllipse(0, 0, 170, 180);
}
QRectF MyItem::boundingRect() const
{
return QRectF(0 , 0 , 170 , 180);
}
void MyItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
qDebug("MyItem::mousePressEvent: %d-%d\n", event->pos().x(), event->pos().y());
m_enStatus = enNormal;
update();
QGraphicsItem::mousePressEvent(event);
}
void MyItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
qDebug("MyItem::mouseReleaseEvent: %d-%d\n", event->pos().x(), event->pos().y());
m_enStatus = enNormal;
update();
QGraphicsItem::mouseReleaseEvent(event);
}
没几行代码,原想myItem模拟按钮。简化后就是以上代码,我测试发现同样获取坐标不对。
[ 此帖被luosw27在2011-03-30 09:31重新编辑 ]