Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
82 changes: 74 additions & 8 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -1,15 +1,81 @@
# Ignore Git repository files
# ==============================================================================
# Docker Build Context Exclusions
# ==============================================================================

# Git
.git
.gitignore
.gitattributes
.gitmodules
.mailmap

# Ignore node_modules or other build artifacts
node_modules
build

# Ignore Docker-related files
Dockerfile*
docker-compose.yml
# GitHub (except build-config.json needed by Dockerfile)
.github/
!.github/build-config.json

# Documentation (not needed for build)
docs/
README.md
CHANGELOG.md
LICENSE-*

# Build artifacts
build/
cmake-build-*/
out/
cpm_modules/
compile_commands.json
CMakeLists.txt.user*
CMakeUserPresets.json

# IDEs & Editors
.idea/
.vscode/
.qtcreator/
.fleet/
.vs/
.settings/
*.swp
*~
tags

# Node.js (docs build)
node_modules/
package-lock.json

# Python
*.pyc
__pycache__/
.ruff_cache/

# Local development
.claude/
.cache/
sessions/
CLAUDE.md
AGENTS.md
GEMINI.md

# Platform artifacts
.DS_Store
*.exe
*.dll
*.so
*.dylib
*.app
*.dmg
*.deb
*.rpm
*.AppImage
*.apk
*.aab
*.ipa

# Test artifacts
*.gcov
*.gcda
*.gcno
*.coverage

# Vagrant
.vagrant/
25 changes: 25 additions & 0 deletions .github/CITATION.cff
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
cff-version: 1.2.0
title: QGroundControl
message: >-
If you use QGroundControl in your research, please cite it using
the metadata from this file.
type: software
authors:
- name: QGroundControl Development Team
website: https://qgroundcontrol.com
repository-code: https://github.com/mavlink/qgroundcontrol
url: https://qgroundcontrol.com
abstract: >-
QGroundControl is an intuitive and powerful ground control station
for UAVs. It provides full flight control and mission planning for
any MAVLink-enabled drone, including PX4 and ArduPilot vehicles.
keywords:
- ground-control-station
- uav
- drone
- mavlink
- px4
- ardupilot
- flight-planning
- telemetry
license: Apache-2.0 AND GPL-3.0-only
15 changes: 15 additions & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# CODEOWNERS - Auto-assign reviewers to pull requests
# https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners

# Default owners for everything
# * @mavlink/qgc-maintainers

# Documentation
/docs/ @hamishwillee

# QML/UI
*.qml @DonLakeFlyer

# Build system
CMakeLists.txt @HTRamsey
/cmake/ @HTRamsey
66 changes: 51 additions & 15 deletions .github/CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ Before you begin, please:

1. Read the [Developer Guide](https://dev.qgroundcontrol.com/en/)
2. Review the [Build Instructions](https://dev.qgroundcontrol.com/en/getting_started/)
3. Familiarize yourself with the [Architecture](copilot-instructions.md)
3. Familiarize yourself with the [Architecture Patterns](#architecture-patterns) in this guide

### Development Environment

Expand Down Expand Up @@ -59,6 +59,10 @@ Feature requests are welcome! Please:
3. Consider implementation complexity
4. Be prepared to contribute code if possible

### Contributing Translations

QGroundControl uses [Crowdin](https://crowdin.com/project/qgroundcontrol) for community translations. See [tools/translations/README.md](../tools/translations/README.md) for details on how translations are managed.

### Contributing Code

1. **Fork the repository**
Expand Down Expand Up @@ -96,6 +100,8 @@ Feature requests are welcome! Please:

## Coding Standards

For the complete coding style guide with examples, see [CODING_STYLE.md](../CODING_STYLE.md).

### C++ Guidelines

- **Standard**: C++20
Expand Down Expand Up @@ -126,7 +132,8 @@ Feature requests are welcome! Please:
- **Code formatting**:
- Run `clang-format` before committing
- Follow `.clang-format` in the repository
- Follow `.clang-format`, `.clang-tidy`, `.editorconfig` in repo root
- See `CodingStyle.h`, `CodingStyle.cc`, `CodingStyle.qml` for examples
- 4 spaces for indentation (no tabs)
### QML Guidelines
Expand All @@ -151,36 +158,66 @@ qCCritical(MyComponentLog) << "Critical error";

### Architecture Patterns

#### Fact System (Required for Parameters)
#### Fact System (Most Important!)

Always use the Fact System for vehicle parameters:
The Fact System handles ALL vehicle parameters. Never create custom parameter storage.

```cpp
// Access parameters (always null-check!)
Fact* param = vehicle->parameterManager()->getParameter(-1, "PARAM_NAME");
if (param) {
param->setCookedValue(newValue); // For display values
// param->setRawValue(newValue); // For MAVLink values
if (param && param->validate(newValue, false).isEmpty()) {
param->setCookedValue(newValue); // Use cookedValue for UI (with units)
// param->rawValue() for MAVLink/storage
}
```
#### Multi-Vehicle Awareness
**Key classes:**
- `Fact` - Single parameter with validation, units, metadata
- `FactGroup` - Hierarchical container (handles MAVLink via `handleMessage()`)
- `FactMetaData` - JSON-based metadata (min/max, enums, descriptions)
**Rules:**
- Wait for `parametersReady` signal before accessing
- Use `cookedValue` (display) vs `rawValue` (storage)
- Metadata in `*.FactMetaData.json` files
Always check for null vehicles:
#### Multi-Vehicle Support
Always null-check the active vehicle:
```cpp
Vehicle* vehicle = MultiVehicleManager::instance()->activeVehicle();
if (vehicle) {
// Use vehicle
}
if (!vehicle) return;
// Other managers
SettingsManager::instance()->appSettings()->...
LinkManager::instance()->...
```

#### Firmware Plugin System

Use FirmwarePlugin for firmware-specific behavior instead of hardcoding:
Use FirmwarePlugin for firmware-specific behavior:

```cpp
vehicle->firmwarePlugin()->isCapable(capability);
// FirmwarePlugin - Firmware behavior (flight modes, capabilities)
vehicle->firmwarePlugin()->flightModes();
vehicle->firmwarePlugin()->isCapable(capability);

// AutoPilotPlugin - Vehicle setup UI
// VehicleComponent - Individual setup items (Radio, Sensors, Safety)
```
#### QML/C++ Integration
```cpp
Q_OBJECT
QML_ELEMENT // Creatable in QML
QML_SINGLETON // Singleton
QML_UNCREATABLE("") // C++-only
Q_PROPERTY(Type name READ getter WRITE setter NOTIFY signal)
Q_INVOKABLE void method();
Q_ENUM(EnumType)
```

---
Expand Down Expand Up @@ -308,7 +345,6 @@ For more details, see [COPYING.md](COPYING.md).

- **User Manual**: https://docs.qgroundcontrol.com/en/
- **Developer Guide**: https://dev.qgroundcontrol.com/en/
- **API Documentation**: In-code documentation and `copilot-instructions.md`
- **Support Guide**: For help and community resources, see [SUPPORT.md](SUPPORT.md)
- **Discussion Forum**: https://discuss.px4.io/c/qgroundcontrol
- **Discord**: https://discord.gg/dronecode
Expand Down
18 changes: 18 additions & 0 deletions .github/DISCUSSION_TEMPLATE/polls.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
title: "[Poll] "
labels: []
body:
- type: markdown
attributes:
value: |
Create a poll to gather community feedback. After creating this discussion, use the poll button in the editor to add your poll options.
- type: textarea
id: context
attributes:
label: Poll Context
description: Provide background information for your poll
placeholder: |
What decision or feedback are you seeking?
Why is this important to the community?
validations:
required: true
86 changes: 86 additions & 0 deletions .github/DISCUSSION_TEMPLATE/q-a.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
title: "[Q&A] "
labels: []
body:
- type: markdown
attributes:
value: |
Thanks for your question! Please check the following resources first:
- [User Guide](https://docs.qgroundcontrol.com/)
- [Developer Guide](https://dev.qgroundcontrol.com/)
- [Existing discussions](https://github.com/mavlink/qgroundcontrol/discussions)

- type: dropdown
id: category
attributes:
label: Question Category
description: What area does your question relate to?
options:
- Setup / Installation
- Vehicle Connection
- Flight Planning / Missions
- Video Streaming
- Telemetry / Parameters
- Custom Builds
- Development / Building from Source
- Other
validations:
required: true

- type: dropdown
id: platform
attributes:
label: Platform
description: What platform are you using?
options:
- Windows
- macOS
- Linux
- Android
- iOS
- Multiple / N/A
validations:
required: true

- type: dropdown
id: firmware
attributes:
label: Flight Stack
description: What firmware are you using?
options:
- PX4
- ArduPilot
- Both / Either
- N/A
validations:
required: false

- type: input
id: version
attributes:
label: QGC Version
description: Which version of QGroundControl?
placeholder: "e.g., 4.4.0, daily build"
validations:
required: false

- type: textarea
id: question
attributes:
label: Question
description: Describe your question in detail
placeholder: |
What I'm trying to do:

What I've tried:

What I expected vs what happened:
validations:
required: true

- type: textarea
id: context
attributes:
label: Additional Context
description: Any additional information, screenshots, or logs
validations:
required: false
4 changes: 4 additions & 0 deletions .github/FUNDING.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# Funding links displayed on repository sidebar
# https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/displaying-a-sponsor-button-in-your-repository

custom: ['https://www.dronecode.org']
Loading
Loading