要求对线可以进行鼠标悬停高亮,拖拽功能
所以,需要重写hoverEnterEvent()/mousePressEvent()这些函数
但是遇到个问题,有多条线交叉的时候,就很难捕捉到这个鼠标事件
初步估计是因为重载QGraphicsItem时候,需要重写bindingRect()函数,返回的该条线所在的矩形区域
这样就导致有的线的矩形区域遮住了其他线的矩形区域,所以被遮罩的线,就捕捉不到鼠标事件
Qt的机制就是这样吗?
怎样保证多个QGraphicsItem交叠的时候,能顺利捕捉到对应的时间
7 个解决方案
#1
使用QGraphicsLineItem
#2
我需要画一个自定义图形的线,不是调用简单的线
#3
响应hover的应当是Z轴最高或同Z值但最后insert进去的;
在Hover事件里,可以获取到光标的坐标,再调用scene的itemAt获取当前光标下的所有items,再去高亮它们
在Hover事件里,可以获取到光标的坐标,再调用scene的itemAt获取当前光标下的所有items,再去高亮它们
#4
那如果按这个说法的话,处理鼠标悬停事件,应该是在QGraphicsScene里处理,而不是在QGraphiscItem里处理
#5
恩,在QGraphicsScene::mouseMoveEvent更好点
#6
有个问题,比如说我有N个Item重合在一起
我想让指定的item置于Scene最顶层,有这个函数吗?
#7
我是这样实现的:
获取跟该item所有相交的items,然后遍历这些Items,求出最大的Z值的item,设该值为max_z_val,
然后在该item中调用QGraphicsItem::setZValue(max_z_val+0.1)
获取跟该item所有相交的items,然后遍历这些Items,求出最大的Z值的item,设该值为max_z_val,
然后在该item中调用QGraphicsItem::setZValue(max_z_val+0.1)
#1
使用QGraphicsLineItem
#2
我需要画一个自定义图形的线,不是调用简单的线
#3
响应hover的应当是Z轴最高或同Z值但最后insert进去的;
在Hover事件里,可以获取到光标的坐标,再调用scene的itemAt获取当前光标下的所有items,再去高亮它们
在Hover事件里,可以获取到光标的坐标,再调用scene的itemAt获取当前光标下的所有items,再去高亮它们
#4
那如果按这个说法的话,处理鼠标悬停事件,应该是在QGraphicsScene里处理,而不是在QGraphiscItem里处理
#5
恩,在QGraphicsScene::mouseMoveEvent更好点
#6
有个问题,比如说我有N个Item重合在一起
我想让指定的item置于Scene最顶层,有这个函数吗?
#7
我是这样实现的:
获取跟该item所有相交的items,然后遍历这些Items,求出最大的Z值的item,设该值为max_z_val,
然后在该item中调用QGraphicsItem::setZValue(max_z_val+0.1)
获取跟该item所有相交的items,然后遍历这些Items,求出最大的Z值的item,设该值为max_z_val,
然后在该item中调用QGraphicsItem::setZValue(max_z_val+0.1)