简体   繁体   中英

Qt: How to be notified when a row is hovered in a QFormLayout?

I have a QFormLayout where the left widgets are QLabels and the right widgets are of various types. I want to get notified when the mouse enters any part of a form-row, so I can display an explanation of that row in my statusbar.

Currently I have a QLabel subclass called HoverableLabel which exposes "mouseEntered" and "mouseLeft" signals (emitted in my reimplementations of enterEvent and leaveEvent). This works, but:

  • The margins between the rows don't trigger the signals
  • The space on the left of the (right-aligned) labels doesn't trigger the signal
  • The widgets on the right don't trigger the signal because I haven't bothered to subclass all of them

What's the Qt-blessed approach to this kind of problem?

Some things I can think of:

  1. Make the formlayout's parent a widget that filters all mousemove events (mouse tracking?) and checks if the mouse has entered some row.
  2. Change the formlayout into a QVBoxLayout, and make the rows into some custom widget like FormRowWidget which handles both hover events and the form-alignment stuff.

Neither is very nice.

I ended up using the first of the two solutions. Good enough, and with some work it can be isolated into a reusable subclass of QFormLayout.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM