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// Qt-Security score:significant reason:default
4
5#ifndef QPERMISSIONS_H
6#define QPERMISSIONS_H
7
8#if 0
9#pragma qt_class(QPermissions)
10#endif
11
12#include <QtCore/qglobal.h>
13#include <QtCore/qtmetamacros.h>
14#include <QtCore/qvariant.h>
15
16#include <QtCore/qshareddata_impl.h>
17#include <QtCore/qtypeinfo.h>
18#include <QtCore/qmetatype.h>
19
20#include <optional>
21
22#if !defined(Q_QDOC)
24#endif
25
26QT_BEGIN_NAMESPACE
27
28#ifndef QT_NO_DEBUG_STREAM
29class QDebug;
30#endif
31
32struct QMetaObject;
33class QCoreApplication;
34
36{
37 template <typename T, typename Enable = void>
38 static constexpr inline bool is_permission_v = false;
39
40 template <typename T>
42public:
43 explicit QPermission() = default;
44
45 template <typename T, if_permission<T> = true>
47
48 Qt::PermissionStatus status() const { return m_status; }
49
50 QMetaType type() const { return m_data.metaType(); }
51
52 template <typename T, if_permission<T> = true>
53 std::optional<T> value() const
54 {
55 if (auto p = data(QMetaType::fromType<T>()))
56 return *static_cast<const T *>(p);
57 return std::nullopt;
58 }
59
60#ifndef QT_NO_DEBUG_STREAM
62#endif
63
64private:
65 Q_CORE_EXPORT const void *data(QMetaType id) const;
66
67 Qt::PermissionStatus m_status = Qt::PermissionStatus::Undetermined;
68 QVariant m_data;
69
70 friend class QCoreApplication;
71};
72
73template <typename T>
74constexpr bool QPermission::is_permission_v<T, typename T::QtPermissionHelper> = true;
75
76#define QT_PERMISSION(ClassName)
77 using QtPermissionHelper = void;
78 friend class QPermission;
79 union U {
80 U() : d(nullptr) {}
81 U(ShortData _data) : data(_data) {}
82 U(ClassName##Private *_d) : d(_d) {}
83 ShortData data;
84 ClassName##Private *d;
85 } u; public
86 :
87 Q_CORE_EXPORT ClassName();
88 Q_CORE_EXPORT ClassName(const ClassName &other) noexcept;
89 ClassName(ClassName &&other) noexcept
90 : u{other.u} { other.u.d = nullptr; }
91 Q_CORE_EXPORT ~ClassName();
92 Q_CORE_EXPORT ClassName &operator=(const ClassName &other) noexcept;
93 QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_MOVE_AND_SWAP(ClassName)
94 void swap(ClassName &other) noexcept { std::swap(u, other.u); } private
95 :
96 /*end*/
97
98class QLocationPermissionPrivate;
100{
101 Q_GADGET_EXPORT(Q_CORE_EXPORT)
102public:
107 Q_ENUM(Accuracy)
108
111
117
120
121private:
122 struct ShortData {
123 Accuracy accuracy;
124 Availability availability;
125 char reserved[sizeof(void*) - sizeof(accuracy) - sizeof(availability)];
126 };
128};
129Q_DECLARE_SHARED(QLocationPermission)
130
131class QCalendarPermissionPrivate;
133{
134 Q_GADGET_EXPORT(Q_CORE_EXPORT)
135public:
140 Q_ENUM(AccessMode)
141
144
145private:
146 struct ShortData {
147 AccessMode mode;
148 char reserved[sizeof(void*) - sizeof(mode)];
149 };
151};
152Q_DECLARE_SHARED(QCalendarPermission)
153
154class QContactsPermissionPrivate;
156{
157 Q_GADGET_EXPORT(Q_CORE_EXPORT)
158public:
163 Q_ENUM(AccessMode)
164
167
168private:
169 struct ShortData {
170 AccessMode mode;
171 char reserved[sizeof(void*) - sizeof(mode)];
172 };
174};
175Q_DECLARE_SHARED(QContactsPermission)
176
177class QBluetoothPermissionPrivate;
179{
180 Q_GADGET_EXPORT(Q_CORE_EXPORT)
181public:
187 Q_DECLARE_FLAGS(CommunicationModes, CommunicationMode)
189
191 Q_CORE_EXPORT CommunicationModes communicationModes() const;
192
193private:
194 struct ShortData {
195 CommunicationMode mode;
196 char reserved[sizeof(void*) - sizeof(mode)];
197 };
199};
200Q_DECLARE_OPERATORS_FOR_FLAGS(QBluetoothPermission::CommunicationModes)
201Q_DECLARE_SHARED(QBluetoothPermission)
202
203#define Q_DECLARE_MINIMAL_PERMISSION(ClassName)
204 class ClassName##Private;
205 class ClassName
206 {
207 struct ShortData { char reserved[sizeof(void*)]; };
208 QT_PERMISSION(ClassName)
209 };
210 Q_DECLARE_SHARED(ClassName)
211
212Q_DECLARE_MINIMAL_PERMISSION(QCameraPermission)
213Q_DECLARE_MINIMAL_PERMISSION(QMicrophonePermission)
214
215#undef QT_PERMISSION
216#undef Q_DECLARE_MINIMAL_PERMISSION
217
218QT_END_NAMESPACE
219
220#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)