Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Toggle main menu visibility
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
25
QT_BEGIN_NAMESPACE
26
27
namespace
QAndroidTypeConverter
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
{
60
Q_ASSERT
(
env
);
61
switch
(
var
.
typeId
()) {
62
case
QMetaType
::
Type
::
Int
:
63
return
env
->
NewLocalRef
(
QJniObject
::
construct
<
QtJniTypes
::
Integer
>(
64
get
<
int
>(
var
))
65
.
object
());
66
case
QMetaType
::
Type
::
Long
:
67
case
QMetaType
::
Type
::
LongLong
:
68
return
env
->
NewLocalRef
(
QJniObject
::
construct
<
QtJniTypes
::
Long
>(
69
get
<
jlong
>(
var
))
70
.
object
());
71
case
QMetaType
::
Type
::
Double
:
72
return
env
->
NewLocalRef
(
QJniObject
::
construct
<
QtJniTypes
::
Double
>(
73
get
<
double
>(
var
))
74
.
object
());
75
case
QMetaType
::
Type
::
Float
:
76
return
env
->
NewLocalRef
(
QJniObject
::
construct
<
QtJniTypes
::
Float
>(
77
get
<
float
>(
var
))
78
.
object
());
79
case
QMetaType
::
Type
::
Bool
:
80
return
env
->
NewLocalRef
(
QJniObject
::
construct
<
QtJniTypes
::
Boolean
>(
81
get
<
bool
>(
var
))
82
.
object
());
83
case
QMetaType
::
Type
::
VoidStar
:
84
return
env
->
NewLocalRef
(
QJniObject
::
construct
<
QtJniTypes
::
Void
>().
object
());
85
case
QMetaType
::
Type
::
QString
:
86
return
env
->
NewLocalRef
(
87
QJniObject
::
fromString
(
get
<
QString
>(
var
)).
object
());
88
default
:
89
if
(
var
.
canConvert
<
QAbstractItemModel
*>()) {
90
return
env
->
NewLocalRef
(
91
QAndroidItemModelProxy
::
createProxy
(
var
.
value
<
QAbstractItemModel
*>())
92
.
object
());
93
}
else
94
return
nullptr
;
95
}
96
return
nullptr
;
97
}
98
};
99
100
QT_END_NAMESPACE
101
102
#
endif
// QANDROIDTYPECONVERTER_P_H
QAndroidTypeConverter
Definition
qandroidtypeconverter_p.h:28
QAndroidTypeConverter::toQVariant
static QVariant toQVariant(const QJniObject &object)
Definition
qandroidtypeconverter_p.h:29
qtbase
src
corelib
platform
android
qandroidtypeconverter_p.h
Generated on
for Qt by
1.18.0