Qt:当行悬停在 QFormLayout 中时如何收到通知?

标签 qt layout

我有一个 QFormLayout,其中左侧小部件是 QLabels,右侧小部件是各种类型。我希望在鼠标进入表单行的任何部分时收到通知,以便我可以在状态栏中显示该行的说明。

目前,我有一个名为 HoverableLabel 的 QLabel 子类,它公开“mouseEntered”和“mouseLeft”信号(在我的 EnterEvent 和 LeaveEvent 重新实现中发出)。这可行,但是:

  • 行之间的边距不会触发信号
  • (右对齐)标签左侧的空格不会触发信号
  • 右侧的小部件不会触发信号,因为我没有费心将它们全部子类化

解决此类问题的 Qt 方法是什么?

我能想到的一些事情:

  1. 使 formlayout 的父级成为一个小部件,用于过滤所有 mousemove 事件(鼠标跟踪?)并检查鼠标是否已进入某行。
  2. 将 formlayout 更改为 QVBoxLayout,并将行放入一些自定义小部件中,例如 FormRowWidget,它可以处理悬停事件和表单对齐内容。

两者都不是很好。

最佳答案

我最终使用了两个解决方案中的第一个。足够好了,通过一些工作,它可以被隔离到 QFormLayout 的可重用子类中。

关于Qt:当行悬停在 QFormLayout 中时如何收到通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3795018/

相关文章:

c++ - 如何将 QString 转换为 int?

qt - 如何获取自动换行后标签的大小(高度)

multithreading - QMutex 卡在锁定状态

css - 如何将 5 个带边框的 div 恰好放在包含带边框的 div 中

layout - JavaFX VBox 和 HBox 布局

c++ - Qt - 使用 QTransform(或类似的),缩放内部 QRect 到/从 QGraphics

html - 如何仅使用 CSS 使多组 div 具有相同的宽度?

html - CSS 3 列布局在大屏幕宽度下折叠

css - 响应式 CSS,同时保持设置的宽度

c++ - 比较 QString 时出错