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
qandroidtypeconverter_p.h
Go to the documentation of this file.
1// Copyright (C) 2024 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 QANDROIDTYPECONVERTER_P_H
6#define QANDROIDTYPECONVERTER_P_H
7
8//
9// W A R N I N G
10// -------------
11//
12// This file is not part of the Qt API. It exists purely as an
13// implementation detail. This header file may change from version to
14// version without notice, or even be removed.
15//
16// We mean it.
17
18#include <QtCore/private/qandroidtypes_p.h>
19#include <QtCore/private/qandroiditemmodelproxy_p.h>
20
21#include <QtCore/qjniobject.h>
22#include <QtCore/qjnienvironment.h>
23#include <QtCore/qjnitypes.h>
24
25QT_BEGIN_NAMESPACE
26
28{
29 [[maybe_unused]] static QVariant toQVariant(const QJniObject &object)
30 {
31 using namespace QtJniTypes;
32 if (!object.isValid())
33 return QVariant{};
34 const QByteArray classname(object.className());
35
36 if (classname == Traits<String>::className())
37 return object.toString();
38 else if (classname == Traits<Integer>::className())
39 return object.callMethod<jint>("intValue");
40 else if (classname == Traits<Long>::className())
41 return QVariant::fromValue<long>(object.callMethod<jlong>("longValue"));
42 else if (classname == Traits<Double>::className())
43 return object.callMethod<jdouble>("doubleValue");
44 else if (classname == Traits<Float>::className())
45 return object.callMethod<jfloat>("floatValue");
46 else if (classname == Traits<Boolean>::className())
47 return QVariant::fromValue<bool>(object.callMethod<jboolean>("booleanValue"));
48 else {
49 QJniEnvironment env;
50 const jclass className = env.findClass(Traits<JQtAbstractItemModel>::className());
51 if (env->IsInstanceOf(object.object(), className))
52 return QVariant::fromValue(QAndroidItemModelProxy::createNativeProxy(object));
53 }
54
55 return QVariant{};
56 }
57
58 [[maybe_unused]] Q_REQUIRED_RESULT static jobject toJavaObject(const QVariant &var, JNIEnv *env)
59 {
61 switch (var.typeId()) {
62 case QMetaType::Type::Int:
64 get<int>(var))
65 .object());
66 case QMetaType::Type::Long:
67 case QMetaType::Type::LongLong:
69 get<jlong>(var))
70 .object());
71 case QMetaType::Type::Double:
73 get<double>(var))
74 .object());
75 case QMetaType::Type::Float:
77 get<float>(var))
78 .object());
79 case QMetaType::Type::Bool:
81 get<bool>(var))
82 .object());
83 case QMetaType::Type::VoidStar:
85 case QMetaType::Type::QString:
86 return env->NewLocalRef(
88 default:
90 return env->NewLocalRef(
92 .object());
93 } else
94 return nullptr;
95 }
96 return nullptr;
97 }
98};
99
100QT_END_NAMESPACE
101
102#endif // QANDROIDTYPECONVERTER_P_H
static QVariant toQVariant(const QJniObject &object)