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.

Alphabetic Keyboard

  • Maximum 400 characters
  • Caps lock toggle
  • Backspace and clear

Numeric

Numeric keypad for number entry.

Numeric Keyboard

  • Calculator-style layout
  • Decimal point support
  • Backspace and clear

Password

PIN entry mode with masked display.

Password Keyboard

  • Maximum 16 digits
  • Masked display (dots)
  • Numeric only

Empty State

Keyboard in inactive/empty state.

Empty Keyboard

Text Entry

Keyboard with active text entry showing input field.

Text Entry Keyboard

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.

Compass

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

PPI Style 0

Traditional radar display with green phosphor look.

Style 1

PPI Style 1

Enhanced visibility with range rings.

Style 2

PPI Style 2

High contrast display.

Style 3

PPI Style 3

Tactical display mode.

Style 4 - Classic Tank

PPI Style 4

Classic tank display with outline rendering.

Style 5 - Classic Arrow

PPI Style 5

Classic arrow display with outline rendering.

Style 6

PPI Style 6

Alternative tactical display.

Additional PPI Variations

Large Display

Extended size PPI for full-screen operation.

PPI Large

Classic Large

Classic style with extended view area.

PPI Classic Large

Wide FOV

Extended field of view for peripheral awareness.

PPI Wide FOV

Simple with Threats

Simplified display showing threat contacts.

PPI Simple Threats

Classic with Threats

Classic display showing threat contacts.

PPI Classic Threats

Modern with Threats

Modern display style with threat contacts.

PPI Modern Threats

Classic Tank No Sight

Classic tank display without sight line.

PPI Classic Tank No Sight

Classic Arrow No Sight

Classic arrow display without sight line.

PPI Classic Arrow No Sight

Modern Tank No Sight

Modern tank display without sight line.

PPI Modern Tank No Sight

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.

Basic Table

Narrow Table

Compact table for space-constrained layouts.

Narrow Table

Colored Rows

Table with alternating row colors for improved readability.

Colored Rows

Row Selection

Table with row selection highlighting.

Row Selection

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.

Engine RPM Idle

Normal Operation

Engine running within normal operating range.

Engine RPM Full

Warning Zone

RPM approaching high threshold.

Engine RPM Warning

Critical / Redline

RPM in critical zone - immediate attention required.

Engine RPM Critical

Compact Mode

Simplified display showing only the RPM dial.

Engine RPM Compact

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.

Speed Parked

Neutral

Vehicle in neutral gear.

Speed Neutral

Normal Operation

Vehicle moving within safe speed range.

Speed Normal

Reverse

Vehicle in reverse gear.

Speed Reverse

Caution

Speed approaching caution threshold.

Speed Caution

Overspeed

Speed exceeding safe limit.

Speed Overspeed

Off-road Mode

Transfer case in low range for off-road operation.

Speed Off-road

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.

Wheels Normal

Turning Left

Front wheels showing steering angle to the left.

Wheels Turning Left

Turning Right

Front wheels showing steering angle to the right.

Wheels Turning Right

Full Lock Left

Maximum steering angle to the left.

Wheels Full Lock

Low Pressure Warning

Tire pressure below recommended level.

Wheels Low Pressure

Flat Tire

Critical tire pressure - no pressure detected.

Wheels Flat Tire

Diff Locked

Differential locks engaged for off-road operation.

Wheels Diff Locked

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.

Driving Aids Default

Compact Mode

Minimal display showing only essential tramline guidance.

Driving Aids Compact

Tramlines Only

Perspective tramlines without distance or heading information.

Driving Aids Tramlines Only

West Heading

Display showing westerly heading with compass indicator.

Driving Aids West Heading

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.

HUMS Faults Empty

Single Active Fault

One active fault event.

HUMS Faults Single Active

Mixed Status

Multiple faults with different severity levels.

HUMS Faults Mixed

Many Faults

Multiple fault events requiring scrolling.

HUMS Faults Many

Compact Mode

Condensed display for space-constrained layouts.

HUMS Faults Compact

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.

Reticle Waterfall Basic

Waterfall Long Range

Extended range waterfall reticle with additional stadia lines.

Reticle Waterfall Long Range

M1A2 SABOT

M1A2 Abrams gunner sight configured for SABOT rounds.

Reticle M1A2 SABOT

M1A2 HEAT with Laser

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

Reticle M1A2 HEAT Laser

M1A2 Coax

M1A2 Abrams gunner sight configured for coaxial machine gun.

Reticle M1A2 Coax

M1A2 Lead

M1A2 Abrams gunner sight showing lead compensation for moving targets.

Reticle M1A2 Lead

Compact Mode

Minimal reticle display for reduced screen area.

Reticle Compact

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);
}

View all rendered widget examples in the images/widgets/ folder.