求qt在QGraphicsView中主动捕获鼠标位置的实现方法?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求qt在QGraphicsView中主动捕获鼠标位置的实现方法?相关的知识,希望对你有一定的参考价值。

qt如何在QGraphicsScene中主动获取鼠标位置就像在QWidget中setMouseTracking(true)之后的效果一样。
目前问题是,qt在所有的控件中都不会去主动捕获,我要怎么做才能在QGraphicsScene主动去获得鼠标mousemove的位置,而不需要按下鼠标移动才能触发。
在GraphicsItem中,是有一个hovermove事件的,但是这个触发的条件是在Item这个对像已经存在的前提条件下。在绘制过程中,我希望这个Item没有加入到scene中去。只有等到这个Item的所有控制点都确定之后才加入到scene中去。

我的绘制过程:
1.右键菜单,选中要画的图形(如:三点圆)
2.左键(单击一下)(创建这个对像并确定第一个点)。
3.在鼠标悬浮状态下捕获第二个可能的点,左键单击一下,确定第二个点。
4.在鼠标悬浮状态下捕获第三个可能的点,左键单击一下,确定第三个点。
5.绘制完成,加入到场景中去。
目前是卡在怎么去获得 悬浮状态 的坐标,以便实时更新图形绘制的样子。

我想在QGraphicsScene中主动捕获鼠标的位置,在QGraphicsView中实现2D绘图(绘制各种自定义的形状)

1、首先新建qt工程,修改pro文件,增加对script的支持,如下图所示。

2、在构造函数中,增加一个QScriptEngine对象,如下图所示。

3、调用evaluate方法执行js命令,如下图所示。

4、最后通过hasUncaughtException方法,判断是否有异常,如下图所示就完成了。

参考技术A 请问下怎么解决的最后?

事件过滤器未捕获 Qt 鼠标移动事件

【中文标题】事件过滤器未捕获 Qt 鼠标移动事件【英文标题】:Qt mouse move events not caught by an event filter 【发布时间】:2011-06-22 12:18:54 【问题描述】:

我似乎无法在我的 eventFilter 中捕获 QEvent::MouseMove 类型的事件。

这是我的事件过滤器:

bool
MapWidget_c::eventFilter( QObject *obj, QEvent *ev )

   if( obj == graphicsGeoMap_mp ||
       obj == graphicsScene_mp ||
       obj == graphicsView_mp )
   
      if( ev->type() == QEvent::MouseMove )
      
         QMouseEvent *mouseEvent = static_cast< QMouseEvent* >( ev );

         mouseMoveEvent( mouseEvent );

         return true;
      
      else
      
         return false;
      
   
   else
   
      // pass the event on to the parent class
      return QWidget::eventFilter( obj, ev );
   

我这样安装过滤器:

graphicsGeoMap_mp->installEventFilter( this ); //QGraphicsGeoMap
graphicsScene_mp->installEventFilter( this ); //QGraphicsScene
graphicsView_mp->installEventFilter( this ); //QGraphicsScene

事件过滤器似乎可以很好地捕获 mousePress 和 mouseRelease 事件,但不能捕获 mouseMove。

可能是什么问题?

【问题讨论】:

【参考方案1】:

原来我在寻找错误的 mouseMove 事件。

我应该一直在捕捉 QEvent::GraphicsSceneMouseMove 事件而不是 QEvent::MouseMove 事件。

【讨论】:

【参考方案2】:

鼠标移动事件通常不启用。您需要在您的 wigdet(s) 上启用鼠标跟踪(通过 setMouseTracking)才能获取它们。

来自QMouseEvent:

只有在按下鼠标按钮时才会发生鼠标移动事件,除非使用 QWidget::setMouseTracking() 启用了鼠标跟踪。

【讨论】:

以上是关于求qt在QGraphicsView中主动捕获鼠标位置的实现方法?的主要内容,如果未能解决你的问题,请参考以下文章

如何识别 QGraphicsView 鼠标移动事件?

QGraphicsView 中的 MouseMoveEvent

Qt画图以及坐标问题

qt在QGraphicsView上面Scene的item里面画线段,已知两点,如何画直线,就是线段两端延伸到view的边框为止

在 Qt c++ 中处理鼠标事件

Ctrl+鼠标左键点击事件捕获Qt