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