检测鼠标何时不在QGraphicsScene中

时间:2014-06-30 11:41:20

标签: qgraphicsscene

我有一个继承自QGraphicsScene的类。我在这个类中有一个mouseMoveEvent。基于鼠标移动,我通过信号将坐标发送到主窗口。我在主窗口中有多个GraphicViews。根据接收信号的场景,我使用QGraphicsTextItem显示场景坐标。 问题是当我离开场景区域时,我无法隐藏QGraphicsTextItem。 有人能为我解决这个问题吗?

 Class Scene::QGraphicsScene
 {
    void MouseMoveEvent(QGraphicsSceneMouseEvent *Event)
    {
       int XPos = event.x();
       int YPos = event.y();
       emit SignalPos(XPos,YPos);
    }
 }

 //In Main Window
 connect(scene1,SignalPos(int,int),this,SlotPos1(int,int);
 //Similarly for scene2,scene3,scene4

 void MainWindow::SlotPos(int X, int Y)
 { 
     m_qgtxtItemX.setText(QString::x);   
    //I want to hide this once I am out of scene.It is a member variable. I tried
    //taking local variable but it didn't work.
    //Similarly for y and other slots
 }

1 个答案:

答案 0 :(得分:1)

在场景中安装事件过滤器。

scene1->installEventFilter(this);

然后在“this”引用的类中实现该方法:

bool eventFilter(QObject *watched, QEvent *event) {
    if (event->type() == QEvent::Leave)
    {
        qDebug() << "Mouse left the scene";
    }       
    return false;
}

刚尝试过,它有效!如果要在多个对象上安装事件过滤器,请使用“watched”来区分它们。

最佳,