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) 上の subrectangle の位置です。そのため、ポイント、画像、およびその中の subrectange を取得します。

マウスの右ボタンまたは左ボタンを押し続けると機能しますが、マウスを動かしたときに更新したいのですが、 drawForeground がまったく呼び出されていないことはわかっています。画面に小さなタイルを表示できるように強制的に更新する方法はありますか?

別のオプション (私が思うに) は、マウス アイコンをタイル イメージに変更することですが、少し調べてみたところ、その方法が見つかりませんでした。

ありがとうございます

4

1 に答える 1

3

setMouseTracking(true);シーンを表示している QGraphicsView を呼び出します。これにより、マウスがビューの上に置かれるたびにマウス移動イベントを生成するようにビューに指示されます。それ以外の場合、ビューは、マウス ボタンを押したままクリック アンド ドラッグしたときにのみ、マウス移動イベントを生成します。

于 2012-07-24T01:37:59.160 に答える