【问题标题】:Determine mouse event: hover leave parent for child widget确定鼠标事件:悬停离开父小部件
【发布时间】:2014-10-07 14:33:04
【问题描述】:

我有 2 个小部件,一个父小部件和一个子小部件:

可以访问red 小部件的实现,是否可以在不实现任何事件处理程序或派生blue 的情况下确定光标从red 小部件悬停到blue 小部件的时刻小部件?

红色区域具有明确定义的厚度(例如 5px)。

【问题讨论】:

  • 您想用这些信息做什么?如果您只想更改小部件的外观,那么 setStyleSheet 应该可以完成这项工作。
  • 我不想要只是外表。当鼠标进入和离开该区域时,我需要光标改变。问题是当光标离开该区域时,我想将其重置为以前的形式
  • 所以只需在两个小部件上设置cursor property
  • 我明白,但我需要为每条边使用不同的光标。该功能非常方便,但它只会为我提供一种游标类型。我希望红色区域成为您可以调整窗口大小的边框
  • 对于这样的功能,我会为每条边添加一个单独的小部件并仅在视觉上合并它。

标签: qt qt5 qwidget qevent qmouseevent


【解决方案1】:

恕我直言,如果没有从红色小部件捕获一个鼠标移动事件和从蓝色小部件捕获一个鼠标移动事件,您将无法捕获 transition,因为鼠标可以在屏幕上跳转并且可能不会连续移动时尚。

【讨论】:

    【解决方案2】:

    不派生:使用事件过滤器,QEvent类型为HoverEnter和HoverLeave。

    带样式表

    QWidget:hover{}
    

    【讨论】:

    • QWidget::event 中尝试了if(event->type() == QEvent::HoverEnter) { qDebug() << "Hover enter"; } 的红色小部件,但它没有显示任何内容...
    • @JacobKrieg 我在 SO 上使用事件过滤器提供了许多答案。所以请检查以下答案之一:stackoverflow.com/questions/26041471/… 它描述了如何安装过滤器 abd 使用它。试试吧。有用吗?
    • 我不会使用事件过滤器,因为我希望它能够在不知道蓝色...qwidget 的名称的情况下工作。我希望用户可以配置蓝色 qwidget 并让他添加它...我看到 eventfilter 方法有点骇人听闻...
    • @JacobKrieg 如果它是小部件,那么您可以设置特殊对象名称并且当您发现事件过滤器中的某些对象具有此特殊名称时(您知道此名称,您设置此名称,而不是用户)然后你知道这是你需要的小部件。
    猜你喜欢
    • 2018-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-01
    • 1970-01-01
    • 2023-03-14
    • 2022-06-15
    相关资源
    最近更新 更多