代码之家  ›  专栏  ›  技术社区  ›  Stefan Monov

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

  •  4
  • Stefan Monov  · 技术社区  · 15 年前

    我有一个QFormLayout,左边的小部件是qlabel,右边的小部件是各种类型的。我想在老鼠进来的时候得到通知 任何部分

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

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

    我能想到的是:

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

    两者都不是很好。

    1 回复  |  直到 15 年前
        1
  •  0
  •   Stefan Monov    15 年前

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