【问题标题】:Force A QWidget to End Event Propagation强制 QWidget 结束事件传播
【发布时间】:2013-05-20 22:41:22
【问题描述】:

我将QLineEdit 附加到QGraphicsScene 的子类。我注意到QGraphicsScene 也获得了任何鼠标事件(例如鼠标按下、鼠标释放、鼠标移动等)对我附加的QLineEdit 的依赖。有什么办法可以防止事件通过QLineEdit进入现场?

我使用:

scene->addWidget(lineEdit);

有什么建议吗?谢谢!

【问题讨论】:

    标签: qt qgraphicsscene qevent


    【解决方案1】:

    http://qt-project.org/doc/qt-4.8/qmouseevent.html#details

    http://qt-project.org/doc/qt-4.8/qt.html#WidgetAttribute-enum

    Qt::WA_NoMousePropagation

    禁止将鼠标事件传播到小部件的父级。该属性默认禁用。

    这里有更多特定于 QGraphicsScene 的信息:

    http://qt-project.org/doc/qt-4.8/qgraphicsscene.html#event-handling-and-propagation

    对于鼠标悬停效果,QGraphicsScene 调度悬停事件。如果一个项目接受悬停事件(参见 QGraphicsItem::acceptHoverEvents()),当鼠标进入它的区域时它会收到一个 GraphicsSceneHoverEnter 事件。随着鼠标继续在项目区域内移动,QGraphicsScene 将向它发送 GraphicsSceneHoverMove 事件。当鼠标离开item所在区域时,item会收到GraphicsSceneHoverLeave事件。

    所有鼠标事件都传递给当前的鼠标抓取器项。如果一个项目接受鼠标事件(参见 QGraphicsItem::acceptedMouseButtons())并且它接收到鼠标按下,它就会成为场景的鼠标抓取器。在没有按下其他鼠标按钮时,它会一直保持鼠标抓取器的状态,直到它接收到鼠标释放。您可以调用 mouseGrabberItem() 来确定当前正在抓取鼠标的项目。

    【讨论】:

    • 感谢 phyatt,帮了大忙
    • 我认为问题在于场景不断窃取焦点。我从来没有看到闪烁的文本光标。
    • qgraphicsscene 中的代理小部件有点奇怪。他们有点工作。过去我对它们做了一些处理,并且它们不会以与嵌套在普通 QWidget 中时相同的速度重绘。您还可以像鼠标事件一样监视有焦点的内容和焦点事件。祝你好运。
    猜你喜欢
    • 2020-03-29
    • 2011-03-04
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多