求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 中的 MouseMoveEvent
qt在QGraphicsView上面Scene的item里面画线段,已知两点,如何画直线,就是线段两端延伸到view的边框为止