Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 将鼠标事件从QGraphicsItem传递到Qgraphicscene_Qt_Qgraphicsitem_Qgraphicsscene - Fatal编程技术网

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){…}