我想在我的鼠标位置显示一个小图像。
所以我这样做了:
void AreaScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event){
MapData::pEnd.setX(event->scenePos().x());
MapData::pEnd.setY(event->scenePos().y());
this->update(0, 0, this->width(), this->height());
}
pEnd是我的观点。
在drawForeground上我做到了:
void AreaScene::drawForeground(QPainter *painter, const QRectF &rect){
qDebug() << "called";
if(MapData::tileIndex!=-1&&MapData::pEnd.x()!=-1){
painter->drawPixmap(MapData::pEnd.x(),MapData::pEnd.y(), *MapData::tileImage, (((int)(MapData::tileIndex%(MapData::tileImage->width()/MapData::tileSize.x())))*MapData::tileSize.y()),
(((int)(MapData::tileIndex/(MapData::tileImage->width()/MapData::tileSize.x())))*MapData::tileSize.x()),
MapData::tileSize.x(), MapData::tileSize.y());
}
}
注意: tile索引是tileImage(QPixelMap)上的子矩形的位置 所以我得到了它内部的点,图像和次正直。
如果我继续按下它更新的鼠标右键或鼠标左键,它可以正常工作,但我想在移动鼠标时更新它,我知道drawForeground甚至根本没有被调用。 有没有办法调用它,强制更新,所以我可以在屏幕上显示小瓷砖?
另一个选项(我认为)是将鼠标图标更改为平铺图像,但我做了一些研究,但没有找到方法。
谢谢ppl
答案 0 :(得分:2)
在显示场景的QGraphicsView上调用setMouseTracking(true);
。这将告诉视图在鼠标悬停在视图上时生成鼠标移动事件。否则,只有在按住鼠标按钮的同时单击并拖动时,视图才会生成鼠标移动事件。