3

我有一个从 QGraphicsItem 实现的类,称为 Node。

我有一个矩形的“节点”,当用户点击它时我可以做一些事情

我使用 mousePress 和 mouseRelease 事件。

但是我想在用户单击“超出”矩形形状时收到通知。

我试图实现这些功能:

Qt代码:

void Node::focusInEvent ( QFocusEvent * event){
cout<<"in"<<endl;
update();

QGraphicsItem::focusInEvent(event);
}
void Node::focusOutEvent ( QFocusEvent * event ){
cout<<"out"<<endl;
update();
QGraphicsItem::focusOutEvent(event);

}
void Node::hoverEnterEvent(QGraphicsSceneHoverEvent *event){
cout<<"out"<<endl;
}

如果我点击进入或离开矩形,这些不会做出反应。我应该自己设置一个逻辑,例如获取鼠标位置并控制它是否超出矩形?还是有内置方法?

或者“节点”对象如何知道是否单击了其他节点对象?

我也想知道,谷歌搜索但找不到焦点事件和焦点事件何时触发?我想当我点击项目时,focusOutEvent 必须工作,然后退出项目,我错了吗?

谢谢你的想法。

4

2 回答 2

2

构建节点时需要执行以下操作:

setFlag( QGraphicsItem::ItemIsFocusable );
setAcceptHoverEvents( true );

第一行使您的项目实际上能够接收焦点,而后者使您的项目收到鼠标事件的通知。

于 2011-07-29T14:46:15.637 回答
1

您是否使用QGraphicsItem::ItemIsSelectableQGraphicsItem::ItemIsMovable调用了图形项的setFlags方法?

根据 QT 文档。

默认情况下,不启用任何标志。

于 2011-07-29T14:16:00.300 回答