问题描述
重写了QGraphicsTextItem,鼠标双击时进入编辑状态,发现有时接收不到键盘响应事件,重新双击一下又可以了,这就诡异!
要是一次都收不到还能理解,这收不到重新双击一下又可以了我就不理解
原因分析:
网上说的设置QGraphicsItem::ItemIsFocusable肯定都有啊,不然一次都编辑不了;
另外,网上有人说必须实现boundingRect()和shape(),如果为空就接收不到键盘事件,这个QGraphicsTextItem自己实现了,我打印出来都有啊,真的不理解;
后来我无意中打印了一下focus的状态,发现不能接收时focus为false,能接收时为true?双击事件时设置一下focus就行了。
我真不理解,下图这状态focus为false,难道是第一下点击设置了焦点,第二下点击又把焦点取消了?
解决方案:
源码如下:
void TextItem::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
{
// 设置可编辑状态
if (textInteractionFlags() == Qt::NoTextInteraction)
{
this->setTextInteractionFlags(Qt::TextEditorInteraction);
// 增加焦点,防止有时双击时没有焦点,不能接收键盘事件keyPressEvent
this->setFocus();
}
return QGraphicsTextItem::mouseDoubleClickEvent(event);
}