【问题标题】:QWidget::mousePressEvent() on two widgets at onceQWidget::mousePressEvent() 同时在两个小部件上
【发布时间】:2016-11-27 12:06:42
【问题描述】:

我正在尝试同时运行两个 QWidget::mousePressEvent() 处理程序。我有两个小部件,A 和 B。 B 继承自 QLabel,A 继承自 QWidget。我在他们两个上都超载了QWidget::mousePressEvent()。来自 B 的小部件正在获取 QPoint 光标位置并且它正在工作。 小部件从 B 类获取此信息,但不幸的是,只有当我单击小部件 B 之外的其他位置(蓝色区域)时。 那么,如果我单击小部件 B 的棕色空间,我应该怎么做才能从小部件 A 运行 QWidget::mousePressEvent()

【问题讨论】:

    标签: c++ qt qwidget qlabel qmouseevent


    【解决方案1】:

    event->ignore(),因为 A 在 B 后面,那么推测 A 是 B 的父级(可能不是直接的,但只要它在树下就无关紧要),所以如果在 B::mousePressEvent() 的末尾你event->ignore() 然后该事件将继续向下传播并触发 A 的 mousePressEvent() 以及...最终,如果没有其他东西消耗该事件。

    另外,由于mousePressEvent() 可能只是调用了一些功能,您也可以从 B 的 A 事件处理程序手动执行此操作,您所需要的只是对它的引用,这很容易实现。如果它们相关,您可能必须将坐标映射到父级。

    【讨论】:

    • event->ignore() 正是我所需要的!非常感谢! (:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-30
    • 2011-11-16
    • 1970-01-01
    • 1970-01-01
    • 2020-12-04
    • 1970-01-01
    相关资源
    最近更新 更多