Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
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)
23#endif
24
25QT_BEGIN_NAMESPACE
26
27#ifndef QT_NO_DEBUG_STREAM
28class QDebug;
29#endif
30
31struct QMetaObject;
32class QCoreApplication;
33
35{
36 template <typename T, typename Enable = void>
37 static constexpr inline bool is_permission_v = false;
38
39 template <typename T>
41public:
42 explicit QPermission() = default;
43
44 template <typename T, if_permission<T> = true>
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
61#endif
62
63private:
64 Q_CORE_EXPORT const void *data(QMetaType id) const;
65
66 Qt::PermissionStatus m_status = Qt::PermissionStatus::Undetermined;
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; public
85 :
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); } private
94 :
95 /*end*/
96
97class QLocationPermissionPrivate;
99{
100 Q_GADGET_EXPORT(Q_CORE_EXPORT)
101public:
106 Q_ENUM(Accuracy)
107
110
116
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:
139 Q_ENUM(AccessMode)
140
143
144private:
145 struct ShortData {
146 AccessMode mode;
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:
162 Q_ENUM(AccessMode)
163
166
167private:
168 struct ShortData {
169 AccessMode mode;
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)
188
190 Q_CORE_EXPORT CommunicationModes communicationModes() const;
191
192private:
193 struct ShortData {
194 CommunicationMode mode;
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
211Q_DECLARE_MINIMAL_PERMISSION(QCameraPermission)
212Q_DECLARE_MINIMAL_PERMISSION(QMicrophonePermission)
213
214#undef QT_PERMISSION
215#undef Q_DECLARE_MINIMAL_PERMISSION
216
217QT_END_NAMESPACE
218
219#endif // QPERMISSIONS_H
Access Bluetooth peripherals.
Access the user's calendar.
Access the user's contacts.
Access the user's location.
Availability
This enum is used to control the availability of the location data.
\inmodule QtCore \inheaderfile QPermissions
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.
void requestPermission(const QPermission &permission, const PermissionCallback &callback)
Qt::PermissionStatus checkPermission(const QPermission &permission)
#define QT_PERMISSION_IMPL_COMMON(ClassName)
#define QT_PERMISSION(ClassName)
QT_REQUIRE_CONFIG(permissions)
#define Q_DECLARE_MINIMAL_PERMISSION(ClassName)