Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qpermissions.h
Go to the documentation of this file.
1// Copyright (C) 2022 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QPERMISSIONS_H
5#define QPERMISSIONS_H
6
7#if 0
8#pragma qt_class(QPermissions)
9#endif
10
11#include <QtCore/qglobal.h>
12#include <QtCore/qtmetamacros.h>
13#include <QtCore/qvariant.h>
14
15#include <QtCore/qshareddata_impl.h>
16#include <QtCore/qtypeinfo.h>
17#include <QtCore/qmetatype.h>
18
19#include <optional>
20
21#if !defined(Q_QDOC)
22QT_REQUIRE_CONFIG(permissions);
23#endif
24
26
27#ifndef QT_NO_DEBUG_STREAM
28class QDebug;
29#endif
30
31struct QMetaObject;
33
35{
36 template <typename T, typename Enable = void>
37 static constexpr inline bool is_permission_v = false;
38
39 template <typename T>
40 using if_permission = std::enable_if_t<is_permission_v<T>, bool>;
41public:
42 explicit QPermission() = default;
43
44 template <typename T, if_permission<T> = true>
45 QPermission(const T &t) : m_data(QVariant::fromValue(t)) {}
46
47 Qt::PermissionStatus status() const { return m_status; }
48
49 QMetaType type() const { return m_data.metaType(); }
50
51 template <typename T, if_permission<T> = true>
52 std::optional<T> value() const
53 {
54 if (auto p = data(QMetaType::fromType<T>()))
55 return *static_cast<const T *>(p);
56 return std::nullopt;
57 }
58
59#ifndef QT_NO_DEBUG_STREAM
60 friend Q_CORE_EXPORT QDebug operator<<(QDebug debug, const QPermission &);
61#endif
62
63private:
64 Q_CORE_EXPORT const void *data(QMetaType id) const;
65
67 QVariant m_data;
68
69 friend class QCoreApplication;
70};
71
72template <typename T>
73constexpr bool QPermission::is_permission_v<T, typename T::QtPermissionHelper> = true;
74
75#define QT_PERMISSION(ClassName) \
76 using QtPermissionHelper = void; \
77 friend class QPermission; \
78 union U { \
79 U() : d(nullptr) {} \
80 U(ShortData _data) : data(_data) {} \
81 U(ClassName##Private *_d) : d(_d) {} \
82 ShortData data; \
83 ClassName##Private *d; \
84 } u; \
85public: \
86 Q_CORE_EXPORT ClassName(); \
87 Q_CORE_EXPORT ClassName(const ClassName &other) noexcept; \
88 ClassName(ClassName &&other) noexcept \
89 : u{other.u} { other.u.d = nullptr; } \
90 Q_CORE_EXPORT ~ClassName(); \
91 Q_CORE_EXPORT ClassName &operator=(const ClassName &other) noexcept; \
92 QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_MOVE_AND_SWAP(ClassName) \
93 void swap(ClassName &other) noexcept { std::swap(u, other.u); } \
94private: \
95 /*end*/
96
97class QLocationPermissionPrivate;
99{
100 Q_GADGET_EXPORT(Q_CORE_EXPORT)
101public:
107
108 Q_CORE_EXPORT void setAccuracy(Accuracy accuracy);
109 Q_CORE_EXPORT Accuracy accuracy() const;
110
116
117 Q_CORE_EXPORT void setAvailability(Availability availability);
118 Q_CORE_EXPORT Availability availability() const;
119
120private:
121 struct ShortData {
122 Accuracy accuracy;
123 Availability availability;
124 char reserved[sizeof(void*) - sizeof(accuracy) - sizeof(availability)];
125 };
127};
128Q_DECLARE_SHARED(QLocationPermission)
129
130class QCalendarPermissionPrivate;
132{
133 Q_GADGET_EXPORT(Q_CORE_EXPORT)
134public:
140
141 Q_CORE_EXPORT void setAccessMode(AccessMode mode);
142 Q_CORE_EXPORT AccessMode accessMode() const;
143
144private:
145 struct ShortData {
147 char reserved[sizeof(void*) - sizeof(mode)];
148 };
150};
151Q_DECLARE_SHARED(QCalendarPermission)
152
153class QContactsPermissionPrivate;
155{
156 Q_GADGET_EXPORT(Q_CORE_EXPORT)
157public:
163
164 Q_CORE_EXPORT void setAccessMode(AccessMode mode);
165 Q_CORE_EXPORT AccessMode accessMode() const;
166
167private:
168 struct ShortData {
170 char reserved[sizeof(void*) - sizeof(mode)];
171 };
173};
174Q_DECLARE_SHARED(QContactsPermission)
175
176class QBluetoothPermissionPrivate;
178{
179 Q_GADGET_EXPORT(Q_CORE_EXPORT)
180public:
186 Q_DECLARE_FLAGS(CommunicationModes, CommunicationMode)
187 Q_FLAG(CommunicationModes)
188
189 Q_CORE_EXPORT void setCommunicationModes(CommunicationModes modes);
190 Q_CORE_EXPORT CommunicationModes communicationModes() const;
191
192private:
193 struct ShortData {
195 char reserved[sizeof(void*) - sizeof(mode)];
196 };
198};
199Q_DECLARE_OPERATORS_FOR_FLAGS(QBluetoothPermission::CommunicationModes)
200Q_DECLARE_SHARED(QBluetoothPermission)
201
202#define Q_DECLARE_MINIMAL_PERMISSION(ClassName) \
203 class ClassName##Private; \
204 class ClassName \
205 { \
206 struct ShortData { char reserved[sizeof(void*)]; }; \
207 QT_PERMISSION(ClassName) \
208 }; \
209 Q_DECLARE_SHARED(ClassName)
210
213
214#undef QT_PERMISSION
215#undef Q_DECLARE_MINIMAL_PERMISSION
216
218
219#endif // QPERMISSIONS_H
Access Bluetooth peripherals.
Q_CORE_EXPORT CommunicationModes communicationModes() const
Q_CORE_EXPORT void setCommunicationModes(CommunicationModes modes)
Access the user's calendar.
Q_CORE_EXPORT void setAccessMode(AccessMode mode)
Sets whether the request is for read-write (mode == AccessMode::ReadOnly) or read-only (mode == Acces...
Q_CORE_EXPORT AccessMode accessMode() const
Returns AccessMode::ReadWrite when the request is for read-write and AccessMode::ReadOnly when it is ...
AccessMode
This enum is used to control access to the calendar data.
Access the camera for taking pictures or videos.
Access the user's contacts.
AccessMode
This enum is used to control access to the contacts data.
Q_CORE_EXPORT AccessMode accessMode() const
Returns AccessMode::ReadWrite when the request is for read-write and AccessMode::ReadOnly when it is ...
Q_CORE_EXPORT void setAccessMode(AccessMode mode)
Sets whether the request is for read-write (mode == AccessMode::ReadOnly) or read-only (mode == Acces...
\inmodule QtCore
\inmodule QtCore
Access the user's location.
Availability
This enum is used to control the availability of the location data.
Q_CORE_EXPORT void setAvailability(Availability availability)
Sets the desired availability of the request.
Q_CORE_EXPORT void setAccuracy(Accuracy accuracy)
Sets the desired accuracy of the request.
Accuracy
This enum is used to control the accuracy of the location data.
Q_CORE_EXPORT Availability availability() const
Returns the availability of the request.
Q_CORE_EXPORT Accuracy accuracy() const
Returns the accuracy of the request.
\inmodule QtCore
Definition qmetatype.h:341
Access the microphone for monitoring or recording sound.
\inmodule QtCore \inheaderfile QPermissions
friend Q_CORE_EXPORT QDebug operator<<(QDebug debug, const QPermission &)
std::optional< T > value() const
QPermission()=default
QPermission(const T &t)
QMetaType type() const
Returns the type of the permission.
Qt::PermissionStatus status() const
Returns the status of the permission.
\inmodule QtCore
Definition qvariant.h:65
QMetaType metaType() const
Combined button and popup list for selecting options.
PermissionStatus
QDateTimePrivate::QDateTimeShortData ShortData
#define Q_DECLARE_FLAGS(Flags, Enum)
Definition qflags.h:174
#define Q_DECLARE_OPERATORS_FOR_FLAGS(Flags)
Definition qflags.h:194
GLenum mode
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLdouble GLdouble t
Definition qopenglext.h:243
GLfloat GLfloat p
[1]
#define QT_PERMISSION(ClassName)
#define Q_DECLARE_MINIMAL_PERMISSION(ClassName)
#define QT_REQUIRE_CONFIG(feature)
#define Q_ENUM(x)
#define Q_GADGET_EXPORT(...)
#define Q_FLAG(x)
unsigned char quint8
Definition qtypes.h:46
\inmodule QtCore