【问题标题】:How to check if the mouse release event has occurred over the widget如何检查鼠标释放事件是否发生在小部件上
【发布时间】:2013-09-30 15:12:10
【问题描述】:

我正在尝试在小部件中捕获鼠标释放事件,以确保之前在同一个小部件中按下了鼠标。 mouseReleaseEvent 已成功调用,但我不知道如何处理参数 QMouseEvent 以检查鼠标的位置是否在小部件内。我当前的代码:

void DeviceWidget::mouseReleaseEvent(QMouseEvent* e)
{
    if (_mouseClick)
    {
        _mouseClick = false;
        emit mouseClick(_deviceInformation);
    }
}

非常感谢,

【问题讨论】:

  • 只有在释放鼠标时鼠标在窗口小部件上时才会触发此事件。检查它是多余的。
  • 不是,即使我在桌面等其他地方松开鼠标也会触发。
  • 发布事件报告给与新闻事件相同的小部件。你不应该对此做任何特别的事情。释放时的实际指针位置无关紧要。

标签: c++ qt


【解决方案1】:

您需要检查鼠标释放事件的本地位置是否在您的小部件内。我认为没有理由使用_mouseClick 成员变量。仅当鼠标按下此小部件时才会调用此方法。当您按下按钮时,小部件开始跟踪鼠标,并且无论鼠标在何处释放,它都会收到释放事件。

void DeviceWidget::mouseReleaseEvent(QMouseEvent* e)
{
    if (rect().contains(e->localPos()->toPoint()) {
        emit mouseClick(_deviceInformation);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-28
    • 2018-11-26
    • 1970-01-01
    • 2016-03-26
    • 2019-11-27
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    相关资源
    最近更新 更多