Summary
The Qt Accessibility Static Analysis check on #3751 surfaced 2 warnings for custom-painted widgets in VfoWidget that lack a QAccessibleInterface, so screen readers can't read their custom-drawn content:
| Location |
Widget |
Finding |
src/gui/VfoWidget.h:182 |
VfoWidget |
overrides paintEvent + exposes data setters, no QAccessibleInterface |
src/gui/VfoWidget.cpp:71 |
LevelBar (S-meter bar) |
overrides paintEvent + exposes data setters, no QAccessibleInterface |
These are pre-existing — both predate #3751, which only added a bool m_signalHasDbm flag (the H1 KiwiSDR no-data fix from #3750) and touched no paint code. Editing VfoWidget.{cpp,h} is what brought the files into the linter's scope. The check is warnings-only and did not block the merge (#3751 is already on main at 87e1adca); filing this so the gap is tracked rather than lost.
Why it matters
VfoWidget (the VFO flag) and LevelBar render frequency, meter, and signal-level information by custom painting. A screen reader currently sees them as opaque widgets. VfoWidget already exposes some state via setAccessibleName on m_dbmLabel + QAccessibleValueChangeEvent, but the custom-drawn meter/frequency content itself has no accessible value, and LevelBar exposes nothing.
Proposed work
Implement QAccessibleInterface subclasses (or companion *Accessible.h) for:
LevelBar — text(Name) = "Signal level", text(Value) = the current S-unit / dBm reading; ideally the QAccessible::Value role so the level reads as a value.
VfoWidget — expose the frequency readout and active meter reading as accessible name/value; coordinate with the existing m_dbmLabel accessibility so they don't double-announce.
Per docs/a11y.md for the canonical Qt patterns (setAccessibleName, QAccessibleValueChangeEvent, QAccessibleInterface subclasses).
Context / refs
Summary
The Qt Accessibility Static Analysis check on #3751 surfaced 2 warnings for custom-painted widgets in
VfoWidgetthat lack aQAccessibleInterface, so screen readers can't read their custom-drawn content:src/gui/VfoWidget.h:182VfoWidgetpaintEvent+ exposes data setters, noQAccessibleInterfacesrc/gui/VfoWidget.cpp:71LevelBar(S-meter bar)paintEvent+ exposes data setters, noQAccessibleInterfaceThese are pre-existing — both predate #3751, which only added a
bool m_signalHasDbmflag (the H1 KiwiSDR no-data fix from #3750) and touched no paint code. EditingVfoWidget.{cpp,h}is what brought the files into the linter's scope. The check is warnings-only and did not block the merge (#3751 is already onmainat87e1adca); filing this so the gap is tracked rather than lost.Why it matters
VfoWidget(the VFO flag) andLevelBarrender frequency, meter, and signal-level information by custom painting. A screen reader currently sees them as opaque widgets.VfoWidgetalready exposes some state viasetAccessibleNameonm_dbmLabel+QAccessibleValueChangeEvent, but the custom-drawn meter/frequency content itself has no accessible value, andLevelBarexposes nothing.Proposed work
Implement
QAccessibleInterfacesubclasses (or companion*Accessible.h) for:LevelBar—text(Name)= "Signal level",text(Value)= the current S-unit / dBm reading; ideally theQAccessible::Valuerole so the level reads as a value.VfoWidget— expose the frequency readout and active meter reading as accessible name/value; coordinate with the existingm_dbmLabelaccessibility so they don't double-announce.Per
docs/a11y.mdfor the canonical Qt patterns (setAccessibleName,QAccessibleValueChangeEvent,QAccessibleInterfacesubclasses).Context / refs
src/gui/widgets is broader than these two; this issue is scoped to theVfoWidget/LevelBarfindings from fix(smartmtr): show no-data on the needle for uncalibrated sources (#3750 H1) #3751. A wider audit could be a separate umbrella.