2012-07-24 62 views
1

我想在鼠標位置顯示一個小圖像。強制更新QGraphicsScene的drawForeground

所以我這樣做:

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

小彭是我的觀點。

在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)的子矩形的位置 所以我得到了點,圖像和裏面的subrectange 。

它的工作原理是,如果我一直按下鼠標右鍵或鼠標左鍵更新它,但我想更新它,當我移動鼠標時,我知道drawForeground甚至沒有被調用。 有沒有辦法叫它,強制更新,所以我可以在屏幕上顯示小瓷磚?

另一種選擇(我認爲)是將鼠標圖標更改爲平鋪圖像,但我做了一些研究,但沒有找到辦法做到這一點。

感謝PPL

回答

2

上所顯示的場景的QGraphicsView呼叫setMouseTracking(true);。這將告訴視圖在鼠標懸停在視圖上時生成鼠標移動事件。否則,視圖只會在按住鼠標按鈕的同時單擊並拖動時生成鼠標移動事件。

+0

你救了我的命,非常感謝 – Lefsler 2012-07-24 11:47:36