QJniArray Class
template <typename T> class QJniArrayLa classe QJniArray est une classe modèle qui représente un tableau en Java. Plus d'informations...
| 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 : | QJniArrayBase |
Types publics
Fonctions publiques
| QJniArray() | |
| QJniArray(Container &&container) | |
| QJniArray(QJniArray<Other> &&other) | |
(since 6.9) | QJniArray(QJniArrayBase::size_type size) |
| QJniArray(QJniObject &&object) | |
| 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
Le modèle QJniArray facilite l'utilisation des méthodes Java qui renvoient ou prennent un tableau Java.
Remarque : lestableaux Java peuvent contenir des types primitifs et des objets. Le tableau lui-même peut être traité comme un objet Java, et le cadre JNI fournit des API explicites pour travailler avec de tels tableaux. En outre, 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, construisez-la à partir d'un conteneur C++ correspondant :
soit à partir d'une liste d'initialisateurs :
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, comme char[] toCharArray() dans la classe Java String, spécifiez le type de retour comme un tableau C (jchar[] dans ce qui suit) :
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 constants. L'accès aux éléments d'un tableau constant est considérablement plus efficace que l'accès à un tableau mutable.
Un QJniArray peut également être construit à partir d'un jarray ou d'un QJniObject existant. Notez toutefois qu'aucun contrôle de type n'est effectué pour vérifier que le jarray ou le QJniObject représente effectivement un tableau contenant des éléments du type spécifié, et que l'accès à un QJniArray non conforme entraîne un comportement indéfini.
Les données d'un QJniArray peuvent être accédées élément par élément à l'aide de at() ou operator[](), ou être itérées.
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 de QJniArray instancié. Pour QJniArray<T>, il s'agit généralement de QList<T>, avec les exceptions suivantes :
| Spécialisation | Type C++ |
|---|---|
| QJniArray<jbyte> | QByteArray |
| QJniArray<char> | QByteArray |
| QJniArray<chaîne> | QStringList |
| QJniArray<QString> | QStringList |
Un tableau de taille fixe peut également être créé sans aucune donnée, et peut ensuite être 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 mutable :
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 tableau peut être assignée à un tableau différent.
Remarque : les tableaux Java sont limités à 32 bits, et le type membre size_type de QJniArray est jsize, qui est un type entier 32 bits. Essayer de construire un QJniArray à partir d'un conteneur C++ qui contient plus de 2^32 éléments provoquera une assertion d'exécution.
Documentation sur les types de membres
[alias] QJniArray::const_iterator
Un itérateur constant à accès aléatoire pour QJniArray.
[alias] QJniArray::const_reverse_iterator
Un itérateur inverse pour QJniArray, synonyme de std::reverse_iterator<const_iterator>.
Documentation des fonctions membres
QJniArray::QJniArray()
Constructeur par défaut de QJniArray. Il ne crée pas de tableau côté Java, et l'instance sera invalide.
Voir aussi isValid.
[explicit] template <typename Container, QJniArrayBase::if_compatible_source_container<Container> = true> QJniArray::QJniArray(Container &&container)
Construit un QJniArray qui enveloppe un tableau Java nouvellement créé pour les éléments de type Container::value_type, et remplit le tableau Java avec les données de container.
Contraintes
Participe à la résolution des surcharges uniquement si Container est un conteneur qui stocke des éléments d'un type JNI type ou d'un type C++ équivalent, et fournit un itérateur direct.
La spécialisation du QJniArray construit dépend du type de valeur de container. Pour un Container<T> (comme par exemple QList<T>), il s'agira généralement de QJniArray<T>, avec les exceptions suivantes :
| Conteneur | Spécialisation |
|---|---|
| QByteArray | QJniArray<jbyte> |
| QStringList | QJniArray<chaîne> |
| Conteneur::value_type | Spécialisation |
| QJniObject | QJniArray<jobjet> |
Voir également QJniArrayBase::fromContainer() et toContainer().
[noexcept] template <typename Other, QJniArrayBase::if_convertible<Other, T> = true> QJniArray::QJniArray(QJniArray<Other> &&other)
Construit un QJniArray en se déplaçant à partir de other. Le tableau other devient invalid.
Contraintes
Participe à la résolution de surcharge uniquement si le type d'élément Other de other est convertible en type d'élément T du QJniArray en cours de construction. Cependant, aucune conversion n'a lieu.
[explicit, since 6.9] QJniArray::QJniArray(QJniArrayBase::size_type size)
Construit un tableau QJni 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 en se déplaçant à partir de object. Le QJniObject devient invalid.
Remarque : ce constructeur ne vérifie pas si l'objet côté Java est un tableau du bon type. L'accès à un QJniArray non conforme entraîne un comportement indéfini.
template <typename Other, QJniArrayBase::if_convertible<Other, T> = true> QJniArray::QJniArray(const QJniArray<Other> &other)
Construit un QJniArray en copiant other. Les deux objets QJniArray référenceront le même objet tableau Java.
Contraintes
Participe à la résolution des surcharges uniquement si le type d'élément Other de other est convertible en type d'élément T du QJniArray en cours de construction. Cependant, aucune conversion n'a lieu.
[explicit] QJniArray::QJniArray(const QJniObject &object)
Construit un QJniArray qui enveloppe 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 un tableau du bon type. L'accès à un QJniArray non conforme entraîne un comportement indéfini.
[explicit] QJniArray::QJniArray(jarray array)
Construit un QJniArray qui enveloppe 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 un tableau du bon type. L'accès à un QJniArray non conforme entraîne un comportement indéfini.
[default] QJniArray::QJniArray(std::initializer_list<T> &list)
Construit un QJniArray qui enveloppe un tableau Java nouvellement créé pour les éléments de type T, et remplit le tableau Java avec les données de list.
Voir également QJniArrayBase::fromContainer() et toContainer().
QJniArray::~QJniArray()
Détruit l'objet QJniArray et libère toutes les références au tableau Java enveloppé.
auto QJniArray::arrayObject() const
Renvoie l'objet Java enveloppé sous la forme du type jarray correspondant au type d'élément T de cet objet QJniArray.
| T | type de tableau |
|---|---|
| jbyte | jbyteArray |
| jchar | jcharArray |
| ... | ... |
| jobject | jobjectArray |
| QJniObject | tableau d'objets |
| Q_DECLARE_JNI_CLASS | jobjectArray |
[noexcept] QJniArray<T>::const_iterator QJniArray::begin() const
[noexcept] QJniArray<T>::iterator QJniArray::begin()
[noexcept] QJniArray<T>::const_iterator QJniArray::constBegin() const
[noexcept] QJniArray<T>::const_iterator QJniArray::cbegin() const
Renvoie un itérateur constant de style STL pointant sur le premier élément du tableau.
Si le tableau est invalid, cette fonction renverra le même itérateur que la fonction end() correspondante.
[noexcept] QJniArray<T>::const_iterator QJniArray::end() const
[noexcept] QJniArray<T>::iterator QJniArray::end()
[noexcept] QJniArray<T>::const_iterator QJniArray::constEnd() const
[noexcept] QJniArray<T>::const_iterator QJniArray::cend() const
Renvoie un itérateur de style STL pointant juste après le dernier élément de la liste.
[noexcept] QJniArray<T>::const_reverse_iterator QJniArray::rbegin() const
[noexcept] QJniArray<T>::reverse_iterator QJniArray::rbegin()
[noexcept] QJniArray<T>::const_reverse_iterator QJniArray::crbegin() const
Renvoie un itérateur inversé de style STL pointant sur le premier élément du tableau, dans l'ordre inverse.
Si le tableau est invalid, cette fonction renverra le même itérateur que la fonction rend() correspondante.
[noexcept] QJniArray<T>::const_reverse_iterator QJniArray::rend() const
[noexcept] QJniArray<T>::reverse_iterator QJniArray::rend()
[noexcept] QJniArray<T>::const_reverse_iterator QJniArray::crend() const
Renvoie un itérateur inversé de style STL pointant juste après le dernier élément de la liste, dans l'ordre inverse.
template <typename Container = QJniArrayBase::ToContainerType<T>, QJniArrayBase::if_compatible_target_container<T, Container> = true> Container QJniArray::toContainer(Container &&container = {}) const
Renvoie un conteneur rempli avec les données du tableau Java enveloppé.
Si aucun container n'est fourni, le type de conteneur renvoyé dépend du type d'élément de ce QJniArray. Pour QJniArray<T>, il s'agit généralement de QList<T>, avec les exceptions suivantes :
| Spécialisation | Type C++ |
|---|---|
| QJniArray<jbyte> | QByteArray |
| QJniArray<char> | QByteArray |
| QJniArray<jstring> | QStringList |
| QJniArray<QString> | QStringList |
Si vous fournissez un conteneur nommé (une valeur l) pour container, ce conteneur est rempli et une référence à ce conteneur est renvoyée. Si vous passez un conteneur temporaire (une valeur r, y compris l'argument par défaut), ce conteneur est rempli et renvoyé par sa valeur.
Cette fonction revient immédiatement si le tableau est invalid.
Voir également QJniArrayBase::fromContainer().
[noexcept] template <typename Other, QJniArrayBase::if_convertible<Other, T> = true> QJniArray<T> &QJniArray::operator=(QJniArray<Other> &&other)
Déplace other dans QJniArray, et renvoie une référence à ce dernier. Le tableau other devient invalid.
Contraintes
Participe à la résolution de surcharge uniquement si le type d'élément Other de other est convertible en type d'élément T de ce QJniArray. Cependant, aucune conversion n'a lieu.
template <typename Other, QJniArrayBase::if_convertible<Other, T> = true> QJniArray<T> &QJniArray::operator=(const QJniArray<Other> &other)
Affecte other à QJniArray et renvoie une référence à cet objet. Les deux objets QJniArray référenceront le même tableau Java.
Contraintes
Participe à la résolution de surcharge uniquement si le type d'élément Other de other est convertible en type d'élément T de ce QJniArray. Cependant, aucune conversion n'a lieu.
[since 6.9] QJniArray<T>::reference QJniArray::operator[](QJniArrayBase::size_type i)
Renvoie un objet de référence pour la valeur à la position i dans le tableau Java enveloppé.
i doit être une position d'index valide dans la liste (c'est-à-dire 0 <= i < size()).
L'objet de référence renvoyé contient la valeur à la position i et, dans la plupart des cas, se convertit implicitement en cette valeur. L'affectation à la référence renvoyée remplacera l'entrée dans le tableau Java. Cependant, l'appel à des fonctions membres mutantes sur l'objet ne modifiera pas l'entrée dans le tableau. Pour appeler une fonction membre sur le résultat de cet opérateur, déréférencer l'objet de référence :
QJniArray<QString> strings = object.callMethod<QString[]>("getStrings"); if (!strings.isEmpty()) { if (!(*array[0]).isEmpty()) { // ... } }
Cependant, si la modification de la valeur dans le tableau lui-même n'est pas prévue, rendez le tableau constant ou utilisez at() à la place.
Cette fonction a été introduite dans Qt 6.9.
QJniArray<T>::const_reference QJniArray::operator[](QJniArrayBase::size_type i) const
QJniArray<T>::const_reference QJniArray::at(QJniArrayBase::size_type i) const
Renvoie la valeur à la position i dans le tableau Java enveloppé.
i doit être une position d'index valide dans la liste (c'est-à-dire 0 <= i < size()).
Voir aussi 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.