QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
QGCApplication.h
Go to the documentation of this file.
1#pragma once
2
3#include <QtCore/QElapsedTimer>
4#include <QtCore/QMap>
5#include <QtCore/QSet>
6#include <QtCore/QTimer>
7#include <QtCore/QTranslator>
8#include <QtGui/QGuiApplication>
9
13
14class QQmlApplicationEngine;
15class QQuickWindow;
17class QGCApplication;
18class QEvent;
19class QPostEventList;
20class QMetaMethod;
21struct QMetaObject;
22
23#if defined(qApp)
24#undef qApp
25#endif
26#define qApp (static_cast<QGCApplication*>(QGuiApplication::instance()))
27
28#if defined(qGuiApp)
29#undef qGuiApp
30#endif
31#define qGuiApp (static_cast<QGCApplication*>(QGuiApplication::instance()))
32
33#define qgcApp() qApp
34
37class QGCApplication : public QGuiApplication
38{
39 Q_OBJECT
40
42 friend class UnitTest;
43public:
44 QGCApplication(int &argc, char *argv[], const QGCCommandLineParser::CommandLineParseResult &args);
46
47 bool runningUnitTests() const { return _runningUnitTests; }
48 bool simpleBootTest() const { return _simpleBootTest; }
49 bool bootTestPassed() const { return _bootTestPassed; }
50
52 bool logOutput() const { return _logOutput; }
53
56 void reportMissingParameter(int componentId, const QString &name);
57
59 bool fakeMobile() const { return _fakeMobile; }
60
61 void setLanguage();
62 QQuickWindow *mainRootWindow();
63 uint64_t msecsSinceBoot() const { return _msecsElapsedTime.elapsed(); }
64
66 void addCompressedSignal(const QMetaMethod &method);
67
68 void removeCompressedSignal(const QMetaMethod &method);
69
70 bool event(QEvent *e) final;
71
72 static QString cachedParameterMetaDataFile();
73 static QString cachedAirframeMetaDataFile();
74
75public:
77 void init();
78 void shutdown();
79
81 QQmlApplicationEngine *qmlAppEngine() const { return _qmlAppEngine; }
82
83signals:
84 void languageChanged(const QLocale &locale);
85
86public slots:
87 void showVehicleConfig();
88
90
92 QLocale getCurrentLanguage() const { return _locale; }
93
95 void showCriticalVehicleMessage(const QString &message);
96
98 void showAppMessage(const QString &message, const QString &title = QString());
99
102 void showRebootAppMessage(const QString &message, const QString &title = QString());
103
105
106private slots:
108 void _missingParamsDisplay();
109 void _qgcCurrentStableVersionDownloadComplete(bool success, const QString &localFile, const QString &errorMsg);
110 static bool _parseVersionText(const QString &versionString, int &majorVersion, int &minorVersion, int &buildVersion);
111 void _showDelayedAppMessages();
112
113private:
114 bool compressEvent(QEvent *event, QObject *receiver, QPostEventList *postedEvents) final;
115
116 bool _initVideo();
117
119 void _initForNormalAppBoot();
120
121 QObject *_rootQmlObject();
122 void _checkForNewVersion();
123
124 bool _runningUnitTests = false;
125 bool _simpleBootTest = false;
126 bool _fakeMobile = false;
127 bool _logOutput = false;
128 quint8 _systemId = 0;
129
130 static constexpr int _missingParamsDelayedDisplayTimerTimeout = 1000;
131 QTimer _missingParamsDelayedDisplayTimer;
132 QList<QPair<int,QString>> _missingParams;
133
134 QQmlApplicationEngine *_qmlAppEngine = nullptr;
135 bool _settingsUpgraded = false;
136 int _majorVersion = 0;
137 int _minorVersion = 0;
138 int _buildVersion = 0;
139 QQuickWindow *_mainRootWindow = nullptr;
140 QTranslator _qgcTranslatorSourceCode;
141 QTranslator _qgcTranslatorQtLibs;
142 QLocale _locale;
143 bool _error = false;
144 bool _showErrorsInToolbar = false;
145 QElapsedTimer _msecsElapsedTime;
146 bool _videoManagerInitialized = false;
147 bool _bootTestPassed = true;
148
149 QList<QPair<QString /* title */, QString /* message */>> _delayedAppMessages;
150
151 class CompressedSignalList
152 {
153 public:
154 CompressedSignalList() {}
155 void add(const QMetaMethod &method);
156 void remove(const QMetaMethod &method);
157 bool contains(const QMetaObject *metaObject, int signalIndex);
158
159 private:
161 static int _signalIndex(const QMetaMethod &method);
162
163 QMap<const QMetaObject*, QSet<int>> _signalMap;
164
165 Q_DISABLE_COPY(CompressedSignalList)
166 };
167
168 CompressedSignalList _compressedSignals;
169
170 const QString _settingsVersionKey = QStringLiteral("SettingsVersion");
171
172 const QString _qgcImageProviderId = QStringLiteral("QGCImages");
173};
The main application and management class.
void qmlAttemptWindowClose()
void reportMissingParameter(int componentId, const QString &name)
void showRebootAppMessage(const QString &message, const QString &title=QString())
bool logOutput() const
Returns true if Qt debug output should be logged to a file.
void init()
Perform initialize which is common to both normal application running and unit tests.
bool fakeMobile() const
static QString cachedParameterMetaDataFile()
QQuickWindow * mainRootWindow()
void removeCompressedSignal(const QMetaMethod &method)
void languageChanged(const QLocale &locale)
static QString cachedAirframeMetaDataFile()
void addCompressedSignal(const QMetaMethod &method)
Registers the signal such that only the last duplicate signal added is left in the queue.
QQmlApplicationEngine * qmlAppEngine() const
Although public, these methods are internal and should only be called by UnitTest code.
friend class UnitTest
Unit Test have access to creating and destroying singletons.
void showCriticalVehicleMessage(const QString &message)
Show non-modal vehicle message to the user.
bool runningUnitTests() const
QGCImageProvider * qgcImageProvider()
uint64_t msecsSinceBoot() const
bool simpleBootTest() const
void showAppMessage(const QString &message, const QString &title=QString())
Show modal application message to the user.
bool bootTestPassed() const
QLocale getCurrentLanguage() const
Get current language.
bool event(QEvent *e) final
This is used to expose images from ImageProtocolHandler.
bool remove(const QString &key)
Result of parsing command-line arguments.