当前位置: 代码迷 >> QT开发 >> 关于QT 中QGraphicsItem 的鼠标事件,该怎么解决
  详细解决方案

关于QT 中QGraphicsItem 的鼠标事件,该怎么解决

热度:98   发布时间:2016-04-25 03:28:43.0
关于QT 中QGraphicsItem 的鼠标事件
RT, 现有一个QGraphicsItem作为父Item  其下有若干继承自QGraphicsItem 的子Items
此时点击任一子Item都是没反应的  若希望点击某一子Item时改变该子Item的背景色 如何实现
我想着是要重写子Item的MousePressEvent() 
像下面这样
void Item::MousePressEvent( QGraphics~~~~~` * enent )
{
    this->setSelected();
}

void paint(...)
{
     ...
    if( this->isSelected() )
    {
        painter->setBrush( Qt::black );
    }
}
大概思路是这样,但是没有效果,感觉像是该鼠标按下事件没有被子Item接收到,请各位前辈不吝赐教
------解决方案--------------------
你有没有重载 QGraphicsScene中的 事件过滤器或者 mousePressEvent的方法, Graphics里面的事件流是通过scene派发的,如果你在场景里面把事件给吞了,就是重载了mousePressEvent然后没做任何处理,没把事件在丢出来,这样就会把事件吞掉。或者在事件过滤器里面return true了,多会吞掉事件,那样你的item里面是接收不到事件的。即使你把焦点设置到item里面去也一样。
------解决方案--------------------
同意
引用:
你有没有重载 QGraphicsScene中的 事件过滤器或者 mousePressEvent的方法, Graphics里面的事件流是通过scene派发的,如果你在场景里面把事件给吞了,就是重载了mousePressEvent然后没做任何处理,没把事件在丢出来,这样就会把事件吞掉。或者在事件过滤器里面return true了,多会吞掉事件,那样你的item里面是接收不到事件的。即使你把焦点设置到i……

------解决方案--------------------
引用:
是这样的  我以前没接触过QT  因为刚进公司 最近工作需要我做一个与这个相关的东西
目标是做一个控件   可惜不能上图

这个控件是像这样的 一个QGraphicsItem  里面包含若干子QGraphicsItem 
然后两个这种控件之间的 内部子Item  之间可以连线表示关系  当子QGraphicsItem 收到MousePressEvent
时作出反应表示被选中  比如说改……

如果你不用scene和view,连个效果都看不到,怎么知道控件做好了没有。
------解决方案--------------------
引用:
难道要沉了  。。。。   是不是Group类 的原因?

既然你用了group的话就重写group的鼠标事件,另外别忘了重写boundingRect函数,返回你需要的group的边框。
应该是没问题的。要是还不行,你就不用group了呗,想把item放一起,就定义个类型,移动一个的时候,让那个类型的跟着移动