2017-11-26 8 views
2

QGraphicsSceneを継承した独自のクラスを作成しました。また、私はマウスイベントのための2つのメソッドを作成しました。後でqDebug()を実行して、クリックの位置が正しいかどうかを確認し、正しくないかどうかを調べます。常にQPoint(0,0)を返します。Qt:QGraphicsSceneマウスの位置は常に(0,0)

多くのmapfromを試しましたが、何も機能しませんでした。これらのポジションを正しく機能させる方法はありますか?

いくつかのコード: MyScene.cpp

#include "pianoscene.h" 
#include <QDebug> 
#include <QGraphicsView> 

MyScene::MyScene() 
{ 
    /*setRect(0,0,100,100); 
    QGraphicsRectItem *kek = new QGraphicsRectItem; 
    QPen pen; 
    pen.setColor(Qt::red); 
    kek->setRect(0,0,50,50); 
    kek->setPen(pen); 
    this->addItem(kek);*/ 
} 

void MyScene::mousePressEvent(QGraphicsSceneMouseEvent *event) 
{ 
    QPoint punkt = views().first()->mapFromScene(event->pos().toPoint()); 
    qDebug()<<"wcisk"<<punkt; 
} 

void MyScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event) 
{ 
    qDebug()<<"wcisk"<<event->pos(); 
} 

答えて

4

pos()座標項目が含まれている、いないシーン座標。シーンを取得するには、scenePos()を使用し、座標:

また
void MyScene::mousePressEvent(QGraphicsSceneMouseEvent *event) 
{ 
    QPoint punkt = views().first()->mapFromScene(event->scenePos().toPoint()); 
    qDebug()<<"wcisk"<<punkt; 
} 

void MyScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event) 
{ 
    qDebug()<<"wcisk"<<event->scenePos(); 
} 

、あなただけの他の機能への座標を伝播する必要がある場合は、toPoint()を使用しないでください。 QPointに変換する実際の理由がない場合はscenePos()とで返されたQPointFを使用してください。不必要な変換の必要はありません。

+0

うん!それが私が探していたものです] –

関連する問題