GVA Widgets¶
The GVA HMI includes a comprehensive set of Qt6-based widgets for building military vehicle displays. All widgets conform to GVA Defence Standard 23-09 styling requirements.
Widget Categories¶
Control Widgets¶
| Widget | Description |
|---|---|
| KeyboardWidget | On-screen keyboard with text and numeric modes |
| CompassWidget | Heading indicator with bearing display |
Display Widgets¶
| Widget | Description |
|---|---|
| PlanPositionIndicator | Radar-style situational awareness display |
| TableWidget | Data grid display |
Vehicle Status Widgets¶
| Widget | Description |
|---|---|
| EngineRpmWidget | Tachometer with engine management indicators |
| VehicleSpeedWidget | Speedometer with gear position and status indicators |
| VehicleWheelsWidget | 8x8 wheel configuration with steering, pressure, and diff locks |
| DrivingAidsOverlay | Transparent overlay with tramlines, distance markers, heading |
Health Monitoring Widgets¶
| Widget | Description |
|---|---|
| HumsFaultsWidget | HUMS fault event display with traffic light indicators |
Weapon System Widgets¶
| Widget | Description |
|---|---|
| ReticleSightWidget | Weapon sight overlays (Waterfall, M1A2 Abrams) |
Alarm Widgets¶
| Widget | Description |
|---|---|
| AlarmIndicator | Alarm status display (see Alarms Service) |
| HealthBar | System health indicator (see UACM Service) |
Keyboard Widget¶
The KeyboardWidget provides an on-screen keyboard for text entry in the GVA HMI.
Modes¶
Alphabetic¶
Full QWERTY keyboard for text entry.

- Maximum 400 characters
- Caps lock toggle
- Backspace and clear
Numeric¶
Numeric keypad for number entry.

- Calculator-style layout
- Decimal point support
- Backspace and clear
Password¶
PIN entry mode with masked display.

- Maximum 16 digits
- Masked display (dots)
- Numeric only
Empty State¶
Keyboard in inactive/empty state.

Text Entry¶
Keyboard with active text entry showing input field.

Keyboard Usage¶
#include <KeyboardWidget.h>
// Create keyboard widget
KeyboardWidget* keyboard = new KeyboardWidget(parent);
// Set mode
keyboard->setMode(KeyboardMode::Alphabetic); // Text mode
keyboard->setMode(KeyboardMode::Numeric); // Numbers
keyboard->setMode(KeyboardMode::Password); // PIN entry
// Get entered text
QString text = keyboard->getText();
// Connect to signals
connect(keyboard, &KeyboardWidget::textChanged, this, &MyClass::onTextChanged);
connect(keyboard, &KeyboardWidget::enterPressed, this, &MyClass::onEnterPressed);
// Clear input
keyboard->clear();
Properties¶
| Property | Type | Description |
|---|---|---|
mode |
KeyboardMode |
Current keyboard mode |
text |
QString |
Current input text |
maxLength |
int |
Maximum character limit |
capsLock |
bool |
Caps lock state |
Signals¶
| Signal | Parameters | Description |
|---|---|---|
textChanged |
QString text |
Emitted when text changes |
enterPressed |
- | Emitted when Enter is pressed |
modeChanged |
KeyboardMode mode |
Emitted when mode changes |
Compass Widget¶
The CompassWidget displays heading information with a rotating compass rose.
Styles¶
Standard¶
Classic compass with cardinal points.

NATO¶
NATO military compass style with mils.
Usage¶
#include <CompassWidget.h>
// Create compass widget
CompassWidget* compass = new CompassWidget(parent);
// Set heading (degrees)
compass->setHeading(90.0); // East
// Get current heading
float heading = compass->getHeading();
// Set display options
compass->setShowBearing(true);
compass->setShowMils(false);
Properties¶
| Property | Type | Description |
|---|---|---|
heading |
float |
Current heading in degrees (0-360) |
showBearing |
bool |
Show numeric bearing |
showMils |
bool |
Show mils instead of degrees |
Plan Position Indicator (PPI)¶
The PlanPositionIndicator provides a radar-style situational awareness display.
Styles¶
The PPI supports 7 different rendering styles:
Style 0 - Classic¶

Traditional radar display with green phosphor look.
Style 1¶

Enhanced visibility with range rings.
Style 2¶

High contrast display.
Style 3¶

Tactical display mode.
Style 4 - Classic Tank¶

Classic tank display with outline rendering.
Style 5 - Classic Arrow¶

Classic arrow display with outline rendering.
Style 6¶

Alternative tactical display.
Additional PPI Variations¶
Large Display¶
Extended size PPI for full-screen operation.

Classic Large¶
Classic style with extended view area.

Wide FOV¶
Extended field of view for peripheral awareness.

Simple with Threats¶
Simplified display showing threat contacts.

Classic with Threats¶
Classic display showing threat contacts.

Modern with Threats¶
Modern display style with threat contacts.

Classic Tank No Sight¶
Classic tank display without sight line.

Classic Arrow No Sight¶
Classic arrow display without sight line.

Modern Tank No Sight¶
Modern tank display without sight line.

PPI Usage¶
#include <PlanPositionIndicator.h>
// Create PPI widget
PlanPositionIndicator* ppi = new PlanPositionIndicator(parent);
// Set display style
ppi->setStyle(PPIStyle::Classic);
// Set range (meters)
ppi->setRange(5000);
// Add track
Track track;
track.id = "T001";
track.bearing = 45.0;
track.range = 2000;
track.type = TrackType::FRIENDLY;
ppi->addTrack(track);
// Update ownship heading
ppi->setHeading(90.0);
Track Types¶
| Type | Colour | Symbol |
|---|---|---|
FRIENDLY |
Blue | Circle |
HOSTILE |
Red | Diamond |
NEUTRAL |
Green | Square |
UNKNOWN |
Yellow | Triangle |
Table Widget¶
The TableWidget displays tabular data in the GVA style.
Table Styles¶
Basic Table¶
Standard table with header row and grid lines.

Narrow Table¶
Compact table for space-constrained layouts.

Colored Rows¶
Table with alternating row colors for improved readability.

Row Selection¶
Table with row selection highlighting.

Usage¶
#include <TableWidget.h>
// Create table
TableWidget* table = new TableWidget(parent);
// Set headers
table->setHeaders({"Name", "Value", "Unit", "Status"});
// Add rows
table->addRow({"Oil Temp", "85", "°C", "OK"});
table->addRow({"Oil Press", "3.5", "bar", "OK"});
table->addRow({"RPM", "2400", "rpm", "OK"});
// Set column widths
table->setColumnWidth(0, 150);
table->setColumnWidth(1, 80);
// Highlight row
table->setRowHighlight(1, HighlightType::WARNING);
Properties¶
| Property | Type | Description |
|---|---|---|
rowCount |
int |
Number of data rows |
columnCount |
int |
Number of columns |
headerVisible |
bool |
Show header row |
gridVisible |
bool |
Show grid lines |
Engine RPM Widget¶
The EngineRpmWidget displays a tachometer with engine management indicators for military
vehicle applications.
States¶
Idle¶
Engine at idle RPM with all indicators normal.

Normal Operation¶
Engine running within normal operating range.

Warning Zone¶
RPM approaching high threshold.

Critical / Redline¶
RPM in critical zone - immediate attention required.

Compact Mode¶
Simplified display showing only the RPM dial.

Engine RPM Usage¶
#include <EngineRpmWidget.h>
// Create RPM widget
EngineRpmWidget* rpm = new EngineRpmWidget(280, 280, parent);
// Set current RPM
rpm->setRpm(2400);
// Configure thresholds
rpm->setHighRpmThreshold(4500); // Amber zone starts
rpm->setRedlineRpm(5500); // Red zone starts
rpm->setMaxRpm(6000); // Gauge maximum
// Set engine management indicators
rpm->setOilPressure(45.0, IndicatorLevel::Normal);
rpm->setCoolantTemp(85.0, IndicatorLevel::Normal);
rpm->setOilTemp(95.0, IndicatorLevel::Normal);
rpm->setBatteryVoltage(13.8, IndicatorLevel::Normal);
rpm->setFuelLevel(75.0);
rpm->setThrottlePosition(25.0);
// Compact mode for space-constrained layouts
rpm->setCompactMode(true);
Engine RPM Properties¶
| Property | Type | Description |
|---|---|---|
rpm |
qreal |
Current engine RPM |
highRpmThreshold |
qreal |
RPM where amber zone begins |
redlineRpm |
qreal |
RPM where red zone begins |
maxRpm |
qreal |
Maximum RPM on gauge |
compactMode |
bool |
Show only RPM dial |
Engine Management Indicators¶
| Indicator | Type | Description |
|---|---|---|
oilPressure |
qreal |
Oil pressure in PSI |
coolantTemp |
qreal |
Coolant temperature in °C |
oilTemp |
qreal |
Oil temperature in °C |
batteryVoltage |
qreal |
Battery voltage |
fuelLevel |
qreal |
Fuel level percentage |
fuelRate |
qreal |
Fuel consumption (L/hr) |
throttlePosition |
qreal |
Throttle position percentage |
exhaustGasTemp |
qreal |
EGT in °C |
milActive |
bool |
Malfunction indicator lamp |
dtcCount |
int |
Diagnostic trouble codes |
Vehicle Speed Widget¶
The VehicleSpeedWidget displays vehicle speed with gear position and drivetrain status
indicators.
Speed States¶
Parked¶
Vehicle stationary with parking brake engaged.

Neutral¶
Vehicle in neutral gear.

Normal Operation¶
Vehicle moving within safe speed range.

Reverse¶
Vehicle in reverse gear.

Caution¶
Speed approaching caution threshold.

Overspeed¶
Speed exceeding safe limit.

Off-road Mode¶
Transfer case in low range for off-road operation.

Vehicle Speed Usage¶
#include <VehicleSpeedWidget.h>
// Create speed widget
VehicleSpeedWidget* speed = new VehicleSpeedWidget(280, 200, parent);
// Set current speed (km/h)
speed->setSpeed(65.0);
// Set display unit
speed->setSpeedUnit(SpeedUnit::KilometersPerHour);
// or
speed->setSpeedUnit(SpeedUnit::MilesPerHour);
// Set gear position
speed->setGearPosition(GearPosition::Forward3);
// Configure thresholds
speed->setCautionThreshold(90.0); // Amber zone
speed->setOverspeedThreshold(110.0); // Red zone
speed->setMaxSpeed(120.0); // Gauge maximum
// Set speed source
speed->setSpeedSource(SpeedSource::WheelSpeed);
// Status indicators
speed->setParkingBrakeEngaged(false);
speed->setAbsFault(false);
speed->setTractionControlActive(true);
speed->setTransferCaseHigh(true); // false = low range
speed->setDrivelineFault(false);
Gear Positions¶
| Position | Display | Description |
|---|---|---|
Park |
P | Parking |
Neutral |
N | Neutral |
Forward1 - Forward6 |
F1-F6 | Forward gears |
Reverse1 - Reverse2 |
R1-R2 | Reverse gears |
Speed Sources¶
| Source | Description |
|---|---|
WheelSpeed |
Primary - wheel speed sensors |
TransmissionOutput |
Primary - transmission output |
GPS |
Fallback - GPS derived speed |
Unknown |
Source not available |
Vehicle Speed Properties¶
| Property | Type | Description |
|---|---|---|
speed |
qreal |
Current speed in km/h |
speedUnit |
SpeedUnit |
Display unit (km/h or mph) |
gearPosition |
GearPosition |
Current gear |
speedSource |
SpeedSource |
Speed data source |
cautionThreshold |
qreal |
Speed for amber zone |
overspeedThreshold |
qreal |
Speed for red zone |
Vehicle Wheels Widget (8x8)¶
The VehicleWheelsWidget displays an 8x8 wheel configuration with steering angles, tire
pressure, and differential lock status.
Wheel States¶
Normal Operation¶
All wheels within normal parameters.

Turning Left¶
Front wheels showing steering angle to the left.

Turning Right¶
Front wheels showing steering angle to the right.

Full Lock Left¶
Maximum steering angle to the left.

Low Pressure Warning¶
Tire pressure below recommended level.

Flat Tire¶
Critical tire pressure - no pressure detected.

Diff Locked¶
Differential locks engaged for off-road operation.

Vehicle Wheels Usage¶
#include <VehicleWheelsWidget.h>
// Create wheels widget
VehicleWheelsWidget* wheels = new VehicleWheelsWidget(200, 300, parent);
// Set steering angle (-45 to +45 degrees)
wheels->setSteeringAngle(-15.0); // Turning left
// Set tire pressures (wheel indices 0-7: 1L, 1R, 2L, 2R, 3L, 3R, 4L, 4R)
wheels->setTirePressure(0, 85.0); // Axle 1 Left
wheels->setTirePressure(1, 85.0); // Axle 1 Right
wheels->setTirePressure(2, 90.0); // Axle 2 Left
wheels->setTirePressure(3, 90.0); // Axle 2 Right
wheels->setTirePressure(4, 95.0); // Axle 3 Left
wheels->setTirePressure(5, 95.0); // Axle 3 Right
wheels->setTirePressure(6, 95.0); // Axle 4 Left
wheels->setTirePressure(7, 95.0); // Axle 4 Right
// Set tire pressure status
wheels->setTirePressureStatus(2, TirePressureStatus::Low);
wheels->setTirePressureStatus(5, TirePressureStatus::Critical);
// Set differential locks
wheels->setFrontDiffLock(DiffLockStatus::Unlocked);
wheels->setCenterDiffLock(DiffLockStatus::Locked);
wheels->setRearDiffLock(DiffLockStatus::Locked);
// Wheel rotation animation (for moving vehicle)
wheels->setWheelRotationSpeed(360.0); // Degrees per second
Wheel Layout¶
FRONT
┌─────────────┐
│ 1L 1R │ Axle 1 (steered)
│ │
│ 2L 2R │ Axle 2 (steered)
│ │
│ 3L 3R │ Axle 3
│ │
│ 4L 4R │ Axle 4
└─────────────┘
REAR
Tire Pressure Status¶
| Status | Colour | Description |
|---|---|---|
Normal |
Green | Within specification |
Low |
Amber | Below recommended |
Critical |
Red | Dangerously low |
Flat |
Red (flashing) | No pressure detected |
Differential Lock Status¶
| Status | Description |
|---|---|
Unlocked |
Normal operation |
Locked |
Differential locked |
Vehicle Wheels Properties¶
| Property | Type | Description |
|---|---|---|
steeringAngle |
qreal |
Front wheel angle (-45 to +45°) |
frontDiffLock |
DiffLockStatus |
Front differential status |
centerDiffLock |
DiffLockStatus |
Center differential status |
rearDiffLock |
DiffLockStatus |
Rear differential status |
wheelRotationSpeed |
qreal |
Animation speed (°/sec) |
Driving Aids Overlay¶
The DrivingAidsOverlay provides a transparent overlay for driver assistance with tramlines,
distance markers, and heading indicators.
Display Modes¶
Default Mode¶
Full driving aids display with tramlines, distance markers, heading, and horizon.

Compact Mode¶
Minimal display showing only essential tramline guidance.

Tramlines Only¶
Perspective tramlines without distance or heading information.

West Heading¶
Display showing westerly heading with compass indicator.

Driving Aids Usage¶
#include <DrivingAidsOverlay.h>
// Create overlay widget
DrivingAidsOverlay* overlay = new DrivingAidsOverlay(640, 480, parent);
// Set heading (degrees)
overlay->setHeading(270.0); // West
// Configure display options
overlay->setShowTramlines(true);
overlay->setShowDistanceMarkers(true);
overlay->setShowHeading(true);
overlay->setShowHorizon(true);
// Set tramline parameters
overlay->setTramlineWidth(2.5); // Vehicle width in meters
overlay->setMaxDistance(50.0); // Maximum visible distance
// Compact mode
overlay->setCompactMode(true);
Driving Aids Properties¶
| Property | Type | Description |
|---|---|---|
heading |
qreal |
Current heading in degrees (0-360) |
showTramlines |
bool |
Display perspective tramlines |
showDistanceMarkers |
bool |
Display distance reference lines |
showHeading |
bool |
Display compass heading |
showHorizon |
bool |
Display artificial horizon |
tramlineWidth |
qreal |
Vehicle width for tramlines |
compactMode |
bool |
Minimal display mode |
HUMS Faults Widget¶
The HumsFaultsWidget displays Health and Usage Monitoring System fault events with traffic
light status indicators.
Display States¶
Empty State¶
No fault events recorded.

Single Active Fault¶
One active fault event.

Mixed Status¶
Multiple faults with different severity levels.

Many Faults¶
Multiple fault events requiring scrolling.

Compact Mode¶
Condensed display for space-constrained layouts.

HUMS Faults Usage¶
#include <HumsFaultsWidget.h>
// Create faults widget
HumsFaultsWidget* faults = new HumsFaultsWidget(600, 350, parent);
// Add fault event
FaultEventInfo fault;
fault.sourceResourceId = 11001;
fault.faultState = "ACTIVE";
fault.faultDescription = "Engine temperature sensor malfunction";
fault.occurrenceTime = "2024-12-08T14:30:00Z";
faults->updateFault("11001:1", fault);
// Update fault state
fault.faultState = "INACTIVE";
fault.timeRectified = "2024-12-08T14:45:00Z";
faults->updateFault("11001:1", fault);
// Clear all faults
faults->clearAll();
Fault States¶
| State | Colour | Description |
|---|---|---|
ACTIVE |
Red | Active fault requiring attention |
ACTIVE_UNCONFIRMED |
Amber | Unconfirmed fault condition |
INACTIVE |
Green | Fault resolved/rectified |
HUMS Faults Properties¶
| Property | Type | Description |
|---|---|---|
faultCount |
int |
Number of recorded faults |
activeFaults |
int |
Number of active faults |
selectedRow |
int |
Currently selected fault row |
Reticle Sight Widget¶
The ReticleSightWidget provides weapon sight overlays for gunner displays with multiple
reticle types and weapon configurations.
Reticle Types¶
Waterfall Basic¶
Standard waterfall reticle for general engagement.

Waterfall Long Range¶
Extended range waterfall reticle with additional stadia lines.

M1A2 SABOT¶
M1A2 Abrams gunner sight configured for SABOT rounds.

M1A2 HEAT with Laser¶
M1A2 Abrams gunner sight configured for HEAT rounds with laser rangefinder active.

M1A2 Coax¶
M1A2 Abrams gunner sight configured for coaxial machine gun.

M1A2 Lead¶
M1A2 Abrams gunner sight showing lead compensation for moving targets.

Compact Mode¶
Minimal reticle display for reduced screen area.

Reticle Sight Usage¶
#include <ReticleSightWidget.h>
// Create reticle widget
ReticleSightWidget* reticle = new ReticleSightWidget(640, 480, parent);
// Set reticle type
reticle->setReticleType(ReticleType::M1A2Abrams);
// or
reticle->setReticleType(ReticleType::Waterfall);
// Configure weapon settings
reticle->setWeaponType("120MM MAIN GUN");
reticle->setAmmoType("M829A4 SABOT");
// Set range (meters)
reticle->setRange(2400);
// Enable laser rangefinder indication
reticle->setLaserActive(true);
reticle->setLasedRange(2387);
// Set zoom level
reticle->setZoomLevel(10); // 10x magnification
// Lead compensation for moving targets
reticle->setLeadAngle(2.5); // mils
Reticle Types¶
| Type | Description |
|---|---|
Waterfall |
General purpose reticle with range stadia |
M1A2Abrams |
M1A2 tank gunner sight reticle |
Ammunition Types (M1A2)¶
| Ammo | Description |
|---|---|
SABOT |
Armor-piercing fin-stabilized discarding sabot |
HEAT |
High-explosive anti-tank |
MPAT |
Multi-purpose anti-tank |
COAX |
7.62mm coaxial machine gun |
Reticle Sight Properties¶
| Property | Type | Description |
|---|---|---|
reticleType |
ReticleType |
Current reticle style |
weaponType |
QString |
Weapon system name |
ammoType |
QString |
Selected ammunition |
range |
int |
Target range in meters |
laserActive |
bool |
Laser rangefinder status |
lasedRange |
int |
Laser measured range |
zoomLevel |
int |
Optical magnification |
leadAngle |
qreal |
Lead compensation in mils |
Styling¶
All widgets support GVA standard colours:
namespace GVAColours {
const QColor Background(0x1A, 0x1A, 0x2E);
const QColor Text(0xFF, 0xFF, 0xFF);
const QColor Highlight(0x00, 0x66, 0xFF);
const QColor Warning(0xFF, 0x98, 0x00);
const QColor Critical(0xD3, 0x2F, 0x2F);
const QColor OK(0x4C, 0xAF, 0x50);
const QColor Border(0x40, 0x40, 0x60);
}
Widget Gallery¶
View all rendered widget examples in the images/widgets/ folder.