1

我想在我的鼠标位置上显示一个小图像。

所以我这样做了:

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());
    }
}

注意:平铺索引是 tileImage (QPixelMap) 上子矩形的位置,所以我得到了点、图像和其中的子矩形。

如果我一直按鼠标右键或鼠标左键,它会更新,但我想在移动鼠标时更新它,我知道根本没有调用 drawForeground。有没有办法调用它,强制更新,以便我可以在屏幕上显示小瓷砖?

另一种选择(我认为)是将鼠标图标更改为平铺图像,但我做了一些研究并没有找到办法。

谢谢大家

4

1 回答 1

3

调用setMouseTracking(true);显示场景的 QGraphicsView。这将告诉视图在鼠标悬停在视图上时生成鼠标移动事件。否则,只有在按住鼠标按钮的同时单击并拖动时,视图才会生成鼠标移动事件。

于 2012-07-24T01:37:59.160 回答