diff --git a/src/corelib/kernel/qpermissions.cpp b/src/corelib/kernel/qpermissions.cpp index 0f168452491..4d268463474 100644 --- a/src/corelib/kernel/qpermissions.cpp +++ b/src/corelib/kernel/qpermissions.cpp @@ -257,6 +257,22 @@ Q_LOGGING_CATEGORY(lcPermissions, "qt.permissions", QtWarningMsg); Returns the type of the permission. */ +/* + \internal +*/ +const void *QPermission::data(QMetaType requestedType) const +{ + const auto actualType = type(); + if (requestedType != actualType) { + qCWarning(lcPermissions, "Cannot convert from %s to %s", + actualType.name(), requestedType.name()); + return nullptr; + } + return m_data.data(); +} + + + #define QT_DEFINE_PERMISSION_SPECIAL_FUNCTIONS(ClassName) \ ClassName::ClassName() : d(new ClassName##Private) {} \ ClassName::ClassName(const ClassName &other) noexcept = default; \ diff --git a/src/corelib/kernel/qpermissions.h b/src/corelib/kernel/qpermissions.h index 7c1cd3678ec..2a23412a221 100644 --- a/src/corelib/kernel/qpermissions.h +++ b/src/corelib/kernel/qpermissions.h @@ -61,13 +61,10 @@ public: template ::value, bool> = true> T data() const { - auto requestedType = QMetaType::fromType(); - if (type() != requestedType) { - qWarning() << "Can not convert from" << type().name() - << "to" << requestedType.name(); + if (auto p = data(QMetaType::fromType())) + return *static_cast(p); + else return T{}; - } - return m_data.value(); } #endif @@ -76,6 +73,8 @@ public: #endif private: + Q_CORE_EXPORT const void *data(QMetaType id) const; + Qt::PermissionStatus m_status = Qt::PermissionStatus::Undetermined; QVariant m_data;