我有一个QFormLayout,其中左窗口小部件是QLabel,而右窗口小部件是各种类型。我想在鼠标进入表单行的任何部分时得到通知,因此我可以在状态栏中显示该行的说明。

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


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


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

我能想到的一些事情:


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


两者都不是很好。

最佳答案

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

07-27 17:44