QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
StateContext.h
Go to the documentation of this file.
1#pragma once
2
3#include <QtCore/QHash>
4#include <QtCore/QString>
5#include <QtCore/QVariant>
6
7#include <any>
8#include <optional>
9#include <typeinfo>
10
31{
32public:
33 StateContext() = default;
34 ~StateContext() = default;
35
36 // -------------------------------------------------------------------------
37 // Type-safe API (preferred)
38 // -------------------------------------------------------------------------
39
43 template<typename T>
44 void set(const QString& key, T&& value)
45 {
46 _data[key] = std::any(std::forward<T>(value));
47 }
48
52 template<typename T>
53 std::optional<T> get(const QString& key) const
54 {
55 auto it = _data.find(key);
56 if (it == _data.end()) {
57 return std::nullopt;
58 }
59
60 try {
61 return std::any_cast<T>(it.value());
62 } catch (const std::bad_any_cast&) {
63 return std::nullopt;
64 }
65 }
66
71 template<typename T>
72 T getOr(const QString& key, const T& defaultValue) const
73 {
74 auto result = get<T>(key);
75 return result.value_or(defaultValue);
76 }
77
81 bool contains(const QString& key) const
82 {
83 return _data.contains(key);
84 }
85
89 template<typename T>
90 bool containsType(const QString& key) const
91 {
92 auto it = _data.find(key);
93 if (it == _data.end()) {
94 return false;
95 }
96 return it.value().type() == typeid(T);
97 }
98
102 bool remove(const QString& key)
103 {
104 return _data.remove(key);
105 }
106
108 void clear()
109 {
110 _data.clear();
111 }
112
114 int count() const
115 {
116 return _data.count();
117 }
118
120 QStringList keys() const
121 {
122 return _data.keys();
123 }
124
125 // -------------------------------------------------------------------------
126 // QVariant API (for QML compatibility)
127 // -------------------------------------------------------------------------
128
130 void setVariant(const QString& key, const QVariant& value)
131 {
132 _variantData[key] = value;
133 }
134
136 QVariant variant(const QString& key) const
137 {
138 return _variantData.value(key);
139 }
140
142 bool containsVariant(const QString& key) const
143 {
144 return _variantData.contains(key);
145 }
146
147private:
148 QHash<QString, std::any> _data;
149 QHash<QString, QVariant> _variantData;
150};
QVariant variant(const QString &key) const
Retrieve a QVariant value.
void clear()
Clear all stored values.
~StateContext()=default
T getOr(const QString &key, const T &defaultValue) const
bool containsType(const QString &key) const
bool remove(const QString &key)
bool contains(const QString &key) const
int count() const
Get the number of stored values.
std::optional< T > get(const QString &key) const
void set(const QString &key, T &&value)
QStringList keys() const
Get all keys in the context.
StateContext()=default
void setVariant(const QString &key, const QVariant &value)
Store a QVariant value.
bool containsVariant(const QString &key) const
Check if a variant key exists.