mirror of
https://github.com/f4exb/sdrangel.git
synced 2026-01-16 10:35:35 -05:00
6.6 KiB
6.6 KiB
applyTo
| applyTo |
|---|
| **/*.cpp, **/*.h, **/*.hpp, **/*.cxx, **/*.cc |
Qt C++ & SDRangel App coding conventions and guidelines
These instructions guide Copilot to generate code that aligns with modern Qt C++ standards, C++20/23 features, software engineering principles, and industry best practices to improve software quality, maintainability, and performance for the SDRangel application.
✅ General C++ Coding Standards
- Follow Google C++ Style Guide or Core Guidelines for consistent code structure
- Use meaningful, descriptive variable, function, class, and file names
- Apply proper Doxygen comments for classes, methods, and complex logic
- Organize code into small, reusable functions or classes with single responsibility
- Avoid magic numbers or hard-coded strings; use constants, enums, or configuration
- Use RAII (Resource Acquisition Is Initialization) for all resource management
- Prefer const correctness throughout the codebase
✅ Modern C++20/23 Best Practices
- Use auto for type deduction when it improves readability
- Utilize smart pointers (
std::unique_ptr,std::shared_ptr) over raw pointers - Apply range-based for loops instead of traditional iterator loops
- Use constexpr for compile-time constants and functions
- Leverage structured bindings for tuple/pair unpacking
- Use std::optional for optional values instead of null pointers
- Apply concepts for template constraints where applicable
- Use std::span for safe array/container views
- Utilize std::string_view for read-only string parameters
- Apply designated initializers for struct initialization
- Use nodiscard attribute for functions whose return values shouldn't be ignored
✅ Qt Framework Standards & Conventions
- Follow Qt's CamelCase naming convention for classes and camelCase for methods/variables
- Use Qt's parent-child ownership model for automatic memory management
- Apply Q_OBJECT macro for classes that need signals/slots or meta-object features
- Use signals and slots for loose coupling between components
- Prefer Qt containers (
QVector,QHash,QSet) over STL containers when integrating with Qt APIs - Use Qt's foreach or range-based for loops with Qt containers
- Apply Qt's string handling (
QString,QStringView) for Unicode support - Use QPointer for safe weak references to QObjects
✅ Project Structure & File Organization
- Header files should:
- Use include guards
- Forward declare classes when possible
- Separate public, protected, and private sections clearly
- Source files should:
- Include corresponding header files first
- Group includes: standard library, Qt headers, project headers
- Organize classes into namespaces when necessary to avoid name collisions
- Maintain a clear separation between interface (header) and implementation (source) files
✅ Qt-Specific Patterns for SDRangel
-
Main Application Structure:
- Implement proper application lifecycle management
- Use
QSettingsfor persistent configuration storage
-
Data Collection & Monitoring:
- Use
QTimerfor periodic data collection - Apply
QThreadorQRunnablefor background processing - Use
QMutexorQReadWriteLockfor thread synchronization - Implement
QFileSystemWatcherfor file monitoring
- Use
-
UI Components:
- Use
QMainWindowas the primary window class - Apply
QWidgetcustomization for specialized displays - Use
QChartsfor data visualization - Implement
QSystemTrayIconfor background operation - Use
QDialogfor settings and configuration windows
- Use
-
Networking & API Integration:
- Use
QNetworkAccessManagerfor HTTP requests - Apply
QNetworkReplyfor handling responses - Use
QJsonDocumentandQJsonObjectfor JSON parsing - Implement proper SSL/TLS handling with
QSslConfiguration
- Use
✅ Performance & Memory Management
- Use Qt's object ownership system to prevent memory leaks
- Apply lazy initialization for expensive resources
- Use QObject::deleteLater() for safe object deletion
- Implement efficient string operations with
QStringBuilder - Use QCache for frequently accessed data
- Apply QPixmapCache for image caching
- Optimize paint events with proper clipping and caching
✅ Cross-Platform Development
- Use Qt's platform abstraction instead of platform-specific code
- Apply conditional compilation sparingly with
Q_OS_*macros - Use QStandardPaths for platform-appropriate file locations
- Implement platform-specific features through Qt's platform plugins
- Apply High DPI scaling support with
Qt::AA_EnableHighDpiScaling
✅ Modern Qt Features to Leverage
- Use Qt Quick for modern, fluid UIs where appropriate
- Apply Qt Concurrent for parallel processing
- Use Qt State Machine for complex state management
- Apply Qt's logging framework with categories
- Use Qt's property system for dynamic behavior
- Apply Qt's animation framework for smooth transitions
✅ Code Quality & Maintainability
-
Follow SOLID Principles adapted for Qt:
- Single Responsibility: Each class has one clear purpose
- Open/Closed: Use Qt's plugin system for extensions
- Liskov Substitution: Proper inheritance hierarchies
- Interface Segregation: Use Qt's abstract base classes
- Dependency Inversion: Use Qt's dependency injection patterns
-
Apply Qt's Model-View patterns for data presentation
-
Use Qt's undo framework for user actions
-
Implement proper error handling with Qt's exception safety
-
Apply const correctness especially with Qt's implicit sharing
✅ Additional Copilot Behavior Preferences
- Generate const-correct, modern C++ code using Qt idioms
- Prioritize readable, maintainable code over premature optimization
- Avoid deprecated Qt APIs; use modern alternatives
- Suggest proper class placement based on Qt application structure
- Default to Qt's memory management and RAII patterns
- Include thread safety considerations for multi-threaded operations
- Consider platform differences when suggesting system-level code
- Provide Doxygen-style documentation for complex functions
- Suggest unit tests alongside new features where applicable
- Use Qt's internationalization support for user-facing strings
- Be direct and concise in code comments; avoid unnecessary verbosity
- Avoid starting responses with "Sure!", "You're right!" or similar phrases; be direct and concise.
- When writing text that'll be visible to users, use clear, professional language without unnecessary exclamations or informalities. Also use Sentence case for titles and headings.