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/QLoggingCategory>
4#include <QtCore/QElapsedTimer>
5#include <QtCore/QMap>
6#include <QtCore/QSet>
7#include <QtCore/QTimer>
8#include <QtCore/QTranslator>
9#include <QtWidgets/QApplication>
10
14
15class QQmlApplicationEngine;
16class QQuickWindow;
18class QGCApplication;
19class QEvent;
20class QPostEventList;
21class QMetaMethod;
22struct QMetaObject;
23
24#if defined(qApp)
25#undef qApp
26#endif
27#define qApp (static_cast<QGCApplication*>(QApplication::instance()))
28
29#if defined(qGuiApp)
30#undef qGuiApp
31#endif
32#define qGuiApp (static_cast<QGCApplication*>(QGuiApplication::instance()))
33
34#define qgcApp() qApp
35
36Q_DECLARE_LOGGING_CATEGORY(QGCApplicationLog)
37
38
41class QGCApplication : public QApplication
42{
43 Q_OBJECT
44
46 friend class UnitTest;
47public:
48 QGCApplication(int &argc, char *argv[], const QGCCommandLineParser::CommandLineParseResult &args);
50
52 static void deleteAllSettingsNextBoot();
53
55 static void clearDeleteAllSettingsNextBoot();
56
57 bool runningUnitTests() const { return _runningUnitTests; }
58 bool simpleBootTest() const { return _simpleBootTest; }
59
61 bool logOutput() const { return _logOutput; }
62
65 void reportMissingParameter(int componentId, const QString &name);
66
68 bool fakeMobile() const { return _fakeMobile; }
69
70 void setLanguage();
71 QQuickWindow *mainRootWindow();
72 uint64_t msecsSinceBoot() const { return _msecsElapsedTime.elapsed(); }
73 QString numberToString(quint64 number);
74 QString bigSizeToString(quint64 size);
75 QString bigSizeMBToString(quint64 size_MB);
76
78 void addCompressedSignal(const QMetaMethod &method);
79
80 void removeCompressedSignal(const QMetaMethod &method);
81
82 bool event(QEvent *e) final;
83
84 static QString cachedParameterMetaDataFile();
85 static QString cachedAirframeMetaDataFile();
86
87public:
89 void init();
90 void shutdown();
91
93 QQmlApplicationEngine *qmlAppEngine() const { return _qmlAppEngine; }
94
95signals:
96 void languageChanged(const QLocale &locale);
97
98public slots:
99 void showVehicleConfig();
100
101 void qmlAttemptWindowClose();
102
104 QLocale getCurrentLanguage() const { return _locale; }
105
107 void showCriticalVehicleMessage(const QString &message);
108
110 void showAppMessage(const QString &message, const QString &title = QString());
111
114 void showRebootAppMessage(const QString &message, const QString &title = QString());
115
116 QGCImageProvider *qgcImageProvider();
117
118private slots:
120 void _missingParamsDisplay();
121 void _qgcCurrentStableVersionDownloadComplete(bool success, const QString &localFile, const QString &errorMsg);
122 static bool _parseVersionText(const QString &versionString, int &majorVersion, int &minorVersion, int &buildVersion);
123 void _showDelayedAppMessages();
124
125private:
126 bool compressEvent(QEvent *event, QObject *receiver, QPostEventList *postedEvents) final;
127
128 void _initVideo();
129
131 void _initForNormalAppBoot();
132
133 QObject *_rootQmlObject();
134 void _checkForNewVersion();
135
136 bool _runningUnitTests = false;
137 bool _simpleBootTest = false;
138 bool _fakeMobile = false;
139 bool _logOutput = false;
140 quint8 _systemId = 0;
141
142 static constexpr int _missingParamsDelayedDisplayTimerTimeout = 1000;
143 QTimer _missingParamsDelayedDisplayTimer;
144 QList<QPair<int,QString>> _missingParams;
145
146 QQmlApplicationEngine *_qmlAppEngine = nullptr;
147 bool _settingsUpgraded = false;
148 int _majorVersion = 0;
149 int _minorVersion = 0;
150 int _buildVersion = 0;
151 QQuickWindow *_mainRootWindow = nullptr;
152 QTranslator _qgcTranslatorSourceCode;
153 QTranslator _qgcTranslatorQtLibs;
154 QLocale _locale;
155 bool _error = false;
156 bool _showErrorsInToolbar = false;
157 QElapsedTimer _msecsElapsedTime;
158 bool _videoManagerInitialized = false;
159
160 QList<QPair<QString /* title */, QString /* message */>> _delayedAppMessages;
161
162 class CompressedSignalList
163 {
164 public:
165 CompressedSignalList() {}
166 void add(const QMetaMethod &method);
167 void remove(const QMetaMethod &method);
168 bool contains(const QMetaObject *metaObject, int signalIndex);
169
170 private:
172 static int _signalIndex(const QMetaMethod &method);
173
174 QMap<const QMetaObject*, QSet<int>> _signalMap;
175
176 Q_DISABLE_COPY(CompressedSignalList)
177 };
178
179 CompressedSignalList _compressedSignals;
180
181 const QString _settingsVersionKey = QStringLiteral("SettingsVersion");
182 static constexpr const char *_deleteAllSettingsKey = "DeleteAllSettingsNextBoot";
183
184 const QString _qgcImageProviderId = QStringLiteral("QGCImages");
185};
Q_DECLARE_LOGGING_CATEGORY(AndroidSerialLog)
bool logOutput() const
Returns true if Qt debug output should be logged to a file.
bool fakeMobile() const
void languageChanged(const QLocale &locale)
QQmlApplicationEngine * qmlAppEngine() const
Although public, these methods are internal and should only be called by UnitTest code.
bool runningUnitTests() const
uint64_t msecsSinceBoot() const
bool simpleBootTest() const
QLocale getCurrentLanguage() const
Get current language.
This is used to expose images from ImageProtocolHandler.
Result of parsing command-line arguments.