如何从主 QWidget 中移除 QGraphicsTextItem 的焦点
Posted
技术标签:
【中文标题】如何从主 QWidget 中移除 QGraphicsTextItem 的焦点【英文标题】:How to remove the focus of a QGraphicsTextItem from a main QWidget 【发布时间】:2014-10-27 12:44:10 【问题描述】:我在QGraphicsView
内绘制了许多QGraphicsTextItem
和QGraphicsItem
。此QGraphicsView
已添加到主Qwidget
。
我已经为此QGraphicsTextItem
编写了“FocusOutEvent
”,并且仅当在QGraphicsView
中调用“MousePressEvent
”时才会移除焦点。
现在我关心的是,当MousePressEvent
在QGraphicsView
之外被调用时,如何移除QGraphicsTextItem
的焦点?
在我的MainWindow.cpp中,我写了一个mousePressEvent
函数:
void EyGuiMainWindow::mousePressEvent(QMouseEvent *e)
QWidget *w = QApplication::focusWidget();
if(w)
w->clearFocus();
但这并没有清除QGraphicsTextItem
。
期待积极的回应。
【问题讨论】:
【参考方案1】:QGraphicsTextItem 不是小部件,而是QGraphicsItem。图形项被添加到 QGraphicsScene 并由一个或多个 QGraphicsView 小部件查看。
呈现的代码只是在当前聚焦的小部件上调用清除焦点,但由于 QGraphicsTextItem 不是小部件,它不会被清除。
为了清除QGraphicsTextItem的焦点,调用它的clearFocus函数。如果您没有指向该项目的指针,您可以使用items() 函数获取场景中所有项目的列表并遍历它们。
【讨论】:
非常感谢您的回答。我使用 Items() 来获取场景项目列表并对其进行迭代以清除它。效果很好。以上是关于如何从主 QWidget 中移除 QGraphicsTextItem 的焦点的主要内容,如果未能解决你的问题,请参考以下文章
如何观察 NSManagedObject 是不是从 managedObjectContext 中移除