Qt 将鼠标事件从QGraphicsItem传递到Qgraphicscene
我有一个来自Qt 将鼠标事件从QGraphicsItem传递到Qgraphicscene,qt,qgraphicsitem,qgraphicsscene,Qt,Qgraphicsitem,Qgraphicsscene,我有一个来自qgraphicscene的场景对象和一个来自QGraphicsItem的自定义项。 我想这个项目是“透明”的鼠标事件,所以点击项目区将调用 qgraphicscene::mousePressEvent() 从文件中: “…禁用项目的鼠标事件(即,使其对 鼠标事件),调用setAcceptedMouseButtons(0)。” 但如果我单击项目区域,场景仍然不会接收mouce事件 MyItem::MyItem(QGraphicsItem*parent): QGraphicsItem(
qgraphicscene
的场景对象和一个来自QGraphicsItem
的自定义项。
我想这个项目是“透明”的鼠标事件,所以点击项目区将调用
qgraphicscene::mousePressEvent()
从文件中:
“…禁用项目的鼠标事件(即,使其对
鼠标事件),调用setAcceptedMouseButtons(0)。”
但如果我单击项目区域,场景仍然不会接收mouce事件
MyItem::MyItem(QGraphicsItem*parent):
QGraphicsItem(父级)
{
setAcceptedMouseButtons(Qt::NoButton);
}
QRectF MyItem::boundingRect()常量
{
返回QRectF(0,0100);
}
void MyItem::paint(QPainter*painter,const QStyleOptionGraphicsItem*选项,QWidget*小部件)
{
painter->fillRect(boundingRect(),QColor(0,0160,10));
}
那么,如何忽略该项目的鼠标事件呢
将来我可能需要使用该项处理鼠标事件,因此正确的决定可能是实现QGraphicsItem::MousePresseEvent(),并以某种方式将事件传递到场景。你把所有事情都搞糟了。
qgraphicscene
始终处理所有鼠标事件!它是(QGraphicsItem
s在场景中)。所以场景接收鼠标事件,然后事件被传递到场景中的各个项目
所以,如果项目不接受鼠标事件,这并不意味着场景将再次处理鼠标事件
看起来你在对场景进行子类化时把事情搞砸了
总之,你的问题是错的。谢谢@marek-r,你完全正确!!我在场景实现中发现了这一点:
if(itemAt(mouseEvent->scenePos())==NULL){…}
。