Sur cette page

QJniArray Class

template <typename T> class QJniArray

La classe QJniArray est une classe de modèle qui représente un tableau en Java. En savoir plus...

En-tête : #include <QJniArray>
CMake : find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake : QT += core
Depuis : Qt 6.8
Hérite de : QJniArrayBase

Types publics

Fonctions publiques

QJniArray()
QJniArray(Container &&container)
QJniArray(QJniArray<Other> &&other)
QJniArray(QJniArray<Other> &&other)
(since 6.9) QJniArray(QJniArrayBase::size_type size)
QJniArray(QJniObject &&object)
QJniArray(const QJniArray<Other> &other)
QJniArray(const QJniArray<Other> &other)
QJniArray(const QJniObject &object)
QJniArray(jarray array)
QJniArray(std::initializer_list<T> &list)
~QJniArray()
auto arrayObject() const
QJniArray<T>::const_reference at(QJniArrayBase::size_type i) const
QJniArray<T>::iterator begin()
QJniArray<T>::const_iterator begin() const
QJniArray<T>::const_iterator cbegin() const
QJniArray<T>::const_iterator cend() const
QJniArray<T>::const_iterator constBegin() const
QJniArray<T>::const_iterator constEnd() const
QJniArray<T>::const_reverse_iterator crbegin() const
QJniArray<T>::const_reverse_iterator crend() const
QJniArray<T>::iterator end()
QJniArray<T>::const_iterator end() const
QJniArray<T>::reverse_iterator rbegin()
QJniArray<T>::const_reverse_iterator rbegin() const
QJniArray<T>::reverse_iterator rend()
QJniArray<T>::const_reverse_iterator rend() const
Container toContainer(Container &&container = {}) const
QJniArray<T> &operator=(QJniArray<Other> &&other)
QJniArray<T> &operator=(const QJniArray<Other> &other)
(since 6.9) QJniArray<T>::reference operator[](QJniArrayBase::size_type i)
QJniArray<T>::const_reference operator[](QJniArrayBase::size_type i) const

Description détaillée

QJniArray est une classe de modèle dans laquelle T spécifie le type d'élément du tableau Java. Le type peut être un type primitif JNI tel que jint ou jbyte, ou un type objet tel que jobject, jstring, ou encore un type déclaré avec Q_DECLARE_JNI_CLASS.

Le modèle QJniArray facilite l'utilisation des méthodes Java qui renvoient ou prennent un tableau Java.

Remarque : les tableaux Java peuvent contenir des types primitifs et des objets. Le tableau lui-même peut être traité comme un objet Java, et le framework JNI fournit des API explicites pour manipuler de tels tableaux. De plus, la bibliothèque de classes Java fournit des types de conteneurs tels que List ou ArrayList. Les objets de ces types ne peuvent pas être représentés par un QJniArray. Utilisez plutôt QJniObject pour appeler les fonctions membres spécifiques à la classe.

Pour créer une instance de QJniArray, vous pouvez soit la construire à partir d’un conteneur C++ correspondant :

QList<int> intList;
const QJniArray intArray = QJniArray(intList);

soit à partir d’une liste d’initialisation :

const QJniArray intArray{1, 2, 3};

QJniArray créera un nouveau tableau Java et y copiera les données du côté C++.

Lorsque vous appelez des fonctions qui renvoient un tableau via QJniObject::callMethod, telles que char[] toCharArray() dans la classe Java String, spécifiez le type de retour comme un tableau C (jchar[] dans l’exemple suivant) :

const auto charArray = stringObject.callMethod<jchar[]>("toCharArray");

La variable ` charArray ` sera de type ` QJniArray<jchar>` et contiendra une nouvelle référence globale à l’objet JNI ` jcharArray `.

Notez que les tableaux dans les extraits de code ci-dessus sont tous de type const. L'accès aux éléments d'un tableau const est nettement plus efficace que les opérations sur un tableau mutable.

Un `QJniArray` peut également être construit à partir d’un ` jarray ` ou d’un ` QJniObject` existant. Notez toutefois qu’aucune vérification de type n’est effectuée pour s’assurer que ` jarray ` ou ` QJniObject ` représente bien un tableau contenant des éléments du type spécifié, et que l’accès à un `QJniArray` non compatible entraîne un comportement indéfini.

Les données d’un QJniArray sont accessibles soit élément par élément à l’aide de ` at()` ou ` operator[]()`, soit par itération.

for (const auto &value : array)
    process(value);

Pour copier l’ensemble du tableau dans un conteneur Qt côté C++, utilisez la fonction toContainer().

const auto bytes = object.callMethod<jbyte[]>("getBytes");
QByteArray data = bytes.toContainer();

Ce qui se produit implicitement dans

const auto data = object.callMethod<QByteArray>("getBytes");

Le type de retour de ` toContainer()` dépend du type avec lequel `QJniArray` a été instancié. Pour ` QJniArray<T> `, il s’agit généralement de ` QList<T>`, à l’exception des cas suivants :

SpécialisationType C++
QJniArray<jbyte>QByteArray
QJniArray<char>QByteArray
QJniArray<jstring>QStringList
QJniArray<QString>QStringList

Un tableau de taille fixe peut également être créé sans aucune donnée, puis rempli élément par élément à l'aide de ` operator[]` :

QJniArray<jint> intArray(size);
for (int i = 0; i < size; ++i)
    intArray[i] = i;

ou un itérateur modifiable :

QJniArray<QString> strings(size);
int i = 0;
for (auto string : strings) // note: not 'auto &string'
    string = u"Row %1"_s.arg(i++);

Comme en Java, la taille d’un tableau ne peut pas être modifiée, mais la variable de type tableau peut être assignée à un autre tableau.

Remarque : les tableauxJava sont limités à 32 bits, et le type de membre size_type de QJniArray est jsize, qui est un type entier de 32 bits. Tenter de construire un QJniArray à partir d'un conteneur C++ contenant plus de 2^32 éléments provoquera une assertion à l'exécution.

Documentation sur les types de membres

[alias] QJniArray::const_iterator

[alias] QJniArray::iterator

Un itérateur à accès aléatoire pour QJniArray. /*

/*!

Un itérateur const à accès aléatoire pour QJniArray.

[alias] QJniArray::const_reverse_iterator

[alias] QJniArray::reverse_iterator

Un itérateur inversé pour ` QJniArray`, synonyme de ` std::reverse_iterator<iterator>`.

Remarque : l'accès à l'élément de l'itérateur inversé à l'aide de ` operator->() ` nécessite C++20, car la fonction ` reverse_iterator ` de C++17 ne prend pas en charge les itérateurs qui renvoient un objet proxy. /*

/*!

Un itérateur inverse pour le QJniArray, synonyme de std::reverse_iterator<const_iterator>.

Remarque : l'accès à l'élément de l'itérateur inversé à l'aide de ` operator->() ` nécessite C++20, car l'itérateur ` reverse_iterator ` de C++17 ne prend pas en charge les itérateurs renvoyant un objet proxy.

Documentation des fonctions membres

[default] QJniArray::QJniArray()

Constructeur par défaut de QJniArray. Cela ne crée pas de tableau côté Java, et l'instance sera invalide.

Voir également isValid.

[explicit] template <typename Container> requires if_compatible_source_container<Container> QJniArray::QJniArray(Container &&container)

Crée un objet `QJniArray` qui encapsule un tableau Java nouvellement créé contenant des éléments de type ` Container::value_type`, et remplit ce tableau Java avec les données provenant de ` container`.

Contraintes

Ne participe à la résolution des surcharges que si ` Container ` est un conteneur stockant des éléments de type ` JNI type ` ou d’un type C++ équivalent, et fournissant un itérateur avant.

La spécialisation du QJniArray construit dépend du type de valeur de container. Pour un Container<T> (tel que, par exemple, QList<T>), il s’agira généralement de QJniArray<T>, avec les exceptions suivantes :

ConteneurSpécialisation
QByteArrayQJniArray<jbyte>
QStringListQJniArray<jstring>
Container::value_typeSpécialisation
QJniObjectQJniArray<jobject>

Voir également QJniArrayBase::fromContainer() et toContainer().

[noexcept] template <typename Other> requires if_convertible<Other, T> QJniArray::QJniArray(QJniArray<Other> &&other)

Crée un objet `QJniArray` à partir de ` other`. Le tableau ` other ` devient ` invalid`.

Contraintes

Ne participe à la résolution des surcharges que si le type d’élément Other de other est convertible vers le type d’élément T du QJniArray en cours de construction. Cependant, aucune conversion n’a lieu concrètement.

[noexcept delete] template <typename Other> requires unless_convertible<Other, T> QJniArray::QJniArray(QJniArray<Other> &&other)

Construit par défaut une instance de ` QJniArray`. Cette fonction est supprimée.

[explicit, since 6.9] QJniArray::QJniArray(QJniArrayBase::size_type size)

Crée un QJniArray vide de taille size. Les éléments du tableau ne sont pas initialisés.

Cette fonction a été introduite dans Qt 6.9.

[explicit noexcept] QJniArray::QJniArray(QJniObject &&object)

Construit un QJniArray à partir de object. L'QJniObject devient invalid.

Remarque : ce constructeur ne vérifie pas si l'objet côté Java est bien un tableau du type approprié. L'accès à un QJniArray dont le type ne correspond pas entraîne un comportement indéfini.

template <typename Other> requires if_convertible<Other, T> QJniArray::QJniArray(const QJniArray<Other> &other)

Crée un objet `QJniArray` en copiant ` other`. Les deux objets `QJniArray` feront référence au même objet de tableau Java.

Contraintes

Ne participe à la résolution des surcharges que si le type d’élément Other de other est convertible vers le type d’élément T du QJniArray en cours de construction. Cependant, aucune conversion n’a lieu concrètement.

[delete] template <typename Other> requires unless_convertible<Other, T> QJniArray::QJniArray(const QJniArray<Other> &other)

Construit par défaut une instance de ` QJniArray`. Cette fonction est supprimée.

[explicit] QJniArray::QJniArray(const QJniObject &object)

Construit un QJniArray qui encapsule le même tableau Java que object, en créant une nouvelle référence globale. Pour construire un QJniArray à partir d'une référence locale existante, utilisez un QJniObject construit via fromLocalRef().

Remarque : ce constructeur ne vérifie pas si l’objet côté Java est bien un tableau du type approprié. L’accès à un `QJniArray` non compatible entraîne un comportement indéfini.

[explicit] QJniArray::QJniArray(jarray array)

Construit un objet `QJniArray` qui encapsule le tableau côté Java ` array`, en créant une nouvelle référence globale à ` array`.

Remarque : ce constructeur ne vérifie pas si l'objet côté Java est bien un tableau du type approprié. L'accès à un `QJniArray` dont le type ne correspond pas entraîne un comportement indéfini.

[implicit] QJniArray::QJniArray(std::initializer_list<T> &list)

Crée un objet `QJniArray` qui encapsule un tableau Java nouvellement créé contenant des éléments de type ` T`, et remplit ce tableau Java avec les données provenant de ` list`.

Voir également QJniArrayBase::fromContainer() et toContainer().

[default] QJniArray::~QJniArray()

Détruit l'objet ` QJniArray ` et libère toutes les références pointant vers le tableau Java encapsulé.

auto QJniArray::arrayObject() const

Renvoie l'objet Java encapsulé sous la forme du type « jarray » correspondant au type d'élément T de cet objet QJniArray.

Ttype jarray
jbytejbyteArray
jcharjcharArray
......
jobjectjobjectArray
QJniObjectjobjectArray
Q_DECLARE_JNI_CLASSjobjectArray

QJniArray<T>::const_reference QJniArray::at(QJniArrayBase::size_type i) const

QJniArray<T>::const_reference QJniArray::operator[](QJniArrayBase::size_type i) const

Renvoie la valeur située à la position i dans le tableau Java encapsulé.

i i doit être un indice valide dans la liste (c'est-à-dire 0 <= < ()). size

Voir également ` size()`.

[noexcept] QJniArray<T>::iterator QJniArray::begin()

[noexcept] QJniArray<T>::const_iterator QJniArray::cbegin() const

[noexcept] QJniArray<T>::const_iterator QJniArray::constBegin() const

[noexcept] QJniArray<T>::const_iterator QJniArray::begin() const

Renvoie un itérateur `const` de type STL pointant vers le premier élément du tableau.

Si le tableau est de type « invalid », cette fonction renvoie le même itérateur que la fonction correspondante « end() ».

Voir également ` end()` et ` rbegin()`.

[noexcept] QJniArray<T>::iterator QJniArray::end()

[noexcept] QJniArray<T>::const_iterator QJniArray::cend() const

[noexcept] QJniArray<T>::const_iterator QJniArray::constEnd() const

[noexcept] QJniArray<T>::const_iterator QJniArray::end() const

Renvoie un itérateur de type STL pointant juste après le dernier élément de la liste.

Voir également begin() et rend().

[noexcept] QJniArray<T>::reverse_iterator QJniArray::rbegin()

[noexcept] QJniArray<T>::const_reverse_iterator QJniArray::crbegin() const

[noexcept] QJniArray<T>::const_reverse_iterator QJniArray::rbegin() const

Renvoie un itérateur inversé de type STL pointant vers le premier élément du tableau, dans l'ordre inverse.

Si le tableau est de type ` invalid`, cette méthode renvoie le même itérateur que la fonction correspondante ` rend()`.

Remarque : l'accès à l'élément de l'itérateur inversé à l'aide de ` operator->() ` nécessite C++20, car la fonction ` reverse_iterator ` de C++17 ne prend pas en charge les itérateurs qui renvoient un objet proxy.

Voir également ` rend()` et ` begin()`.

[noexcept] QJniArray<T>::reverse_iterator QJniArray::rend()

[noexcept] QJniArray<T>::const_reverse_iterator QJniArray::crend() const

[noexcept] QJniArray<T>::const_reverse_iterator QJniArray::rend() const

Renvoie un itérateur inversé de type STL pointant juste après le dernier élément de la liste, dans l'ordre inverse.

Remarque : l'accès à l'élément de l'itérateur inversé à l'aide de ` operator->() ` nécessite C++20, car la fonction ` reverse_iterator ` de C++17 ne prend pas en charge les itérateurs qui renvoient un objet proxy.

Voir également ` rbegin()` et ` end()`.

template <typename Container = QJniArrayBase::ToContainerType<T>> requires if_compatible_target_container<T, Container> Container QJniArray::toContainer(Container &&container = {}) const

Renvoie un conteneur rempli avec les données du tableau Java encapsulé.

Si aucun container n’est fourni, le type du conteneur renvoyé dépend alors du type d’élément de cette QJniArray. Pour QJniArray<T>, il s’agira généralement de QList<T>, avec les exceptions suivantes :

Si vous passez un conteneur nommé (une l-valeur) à la fonction ` container`, ce conteneur est rempli et une référence à celui-ci est renvoyée. Si vous passez un conteneur temporaire (une r-valeur, y compris l’argument par défaut), ce conteneur est rempli et renvoyé par valeur.

Cette fonction retourne immédiatement si le tableau est de type ` invalid`.

Voir également ` QJniArrayBase::fromContainer()`.

[noexcept] template <typename Other> requires if_convertible<Other, T> QJniArray<T> &QJniArray::operator=(QJniArray<Other> &&other)

Déplace ` other ` vers ` QJniArray` et renvoie une référence à ce dernier. Le tableau ` other ` devient ` invalid`.

Contraintes

Ne participe à la résolution des surcharges que si le type d’élément Other de other est convertible vers le type d’élément T de cet objet QJniArray. Toutefois, aucune conversion n’a lieu.

template <typename Other> requires if_convertible<Other, T> QJniArray<T> &QJniArray::operator=(const QJniArray<Other> &other)

Attribue la valeur « other » à cet objet « QJniArray » et renvoie une référence à celui-ci. Les deux objets « QJniArray » feront référence au même objet tableau Java.

Contraintes

Ne participe à la résolution des surcharges que si le type d’élément Other de other est convertible vers le type d’élément T de cet objet QJniArray. Toutefois, aucune conversion n’a lieu en réalité.

[since 6.9] QJniArray<T>::reference QJniArray::operator[](QJniArrayBase::size_type i)

Renvoie un objet de référence correspondant à la valeur située à l'indice i dans le tableau Java encapsulé.

i i doit être un indice valide dans la liste (c'est-à-dire 0 <= < ()). size

L’objet de référence renvoyé contient la valeur située à la position i et, dans la plupart des cas, sera implicitement converti en cette valeur. L’affectation à la référence renvoyée écrasera l’élément du tableau Java. Cependant, l’appel de fonctions membres mutantes sur l’objet ne modifiera pas l’élément du tableau. Pour appeler une fonction membre sur le résultat de cet opérateur, déréférencez l’objet de référence :

QJniArray<QString> strings = object.callMethod<QString[]>("getStrings");
if (!strings.isEmpty()) {
    if (!(*array[0]).isEmpty()) {
        // ...
    }
}

Toutefois, si vous ne souhaitez pas modifier la valeur dans le tableau lui-même, déclarez le tableau comme `const` ou utilisez plutôt ` at()` à la place.

Cette fonction a été introduite dans Qt 6.9.

Voir également ` at()` et ` size()`.

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.