From 0fbd3fedd7e84b4bc6a154e7c340cb31b2214d37 Mon Sep 17 00:00:00 2001 From: "Dr. Peter Droste" Date: Thu, 25 May 2023 13:52:33 +0200 Subject: [PATCH] QtJambi 6.5.1 release issue #158 issue #153 issue #152 issue #151 issue #150 issue #149 issue #148 issue #147 --- README.md | 22 +- src/cpp/QtJambi/containeraccess_list.cpp | 3 - src/cpp/QtJambi/containeraccess_vector.cpp | 3 - src/cpp/QtJambi/containers.cpp | 50 + src/cpp/QtJambi/convert.cpp | 21 +- src/cpp/QtJambi/coreapi.cpp | 4 +- src/cpp/QtJambi/debug.cpp | 93 +- src/cpp/QtJambi/debugapi.h | 30 +- src/cpp/QtJambi/events.cpp | 4 +- src/cpp/QtJambi/exception.cpp | 21 +- src/cpp/QtJambi/fileengine.cpp | 9 +- src/cpp/QtJambi/functionpointer.cpp | 11 +- src/cpp/QtJambi/java.cpp | 5 + src/cpp/QtJambi/java_p.h | 5 + src/cpp/QtJambi/javaarrays.cpp | 4 +- src/cpp/QtJambi/javabuffers.cpp | 4 +- src/cpp/QtJambi/javainvalidate.cpp | 8 +- src/cpp/QtJambi/jni_metatype.cpp | 50 +- src/cpp/QtJambi/jni_nativepointer.cpp | 6 +- src/cpp/QtJambi/jni_signals.cpp | 23 +- src/cpp/QtJambi/jni_utilities.cpp | 10 +- src/cpp/QtJambi/jnienvironment.cpp | 4 +- src/cpp/QtJambi/jobjectwrapper.cpp | 2 +- src/cpp/QtJambi/paint.cpp | 3 +- src/cpp/QtJambi/qtjambilink.cpp | 44 +- src/cpp/QtJambi/qtjambimetaobject.cpp | 86 +- src/cpp/QtJambi/qtjambimetaobject_p.h | 5 + src/cpp/QtJambi/qtjambishell.cpp | 15 +- src/cpp/QtJambi/registry.cpp | 4 +- src/cpp/QtJambi/scope.cpp | 8 +- src/cpp/QtJambi/setup.cpp | 20 +- src/cpp/QtJambi/thread.cpp | 2 +- src/cpp/QtJambi/typemanager.cpp | 78 +- src/cpp/QtJambi/utils_p.h | 6 + src/cpp/QtJambi/variant.cpp | 2 +- src/cpp/QtJambiCore/QLinkedList_shell.cpp | 16 +- src/cpp/QtJambiCore/QList_shell.cpp | 155 ++ src/cpp/QtJambiCore/QVector_shell.cpp | 185 +- src/cpp/QtJambiCore/impl.cpp | 246 ++- src/cpp/QtJambiCore/utils.cpp | 1 + src/cpp/QtJambiCore/utils_p.h | 3 +- src/cpp/QtJambiGenerator/cppimplgenerator.cpp | 20 +- src/cpp/QtJambiGenerator/javagenerator.cpp | 101 +- .../QtJambiGenerator/typesystem/codesnip.h | 1 + .../typesystem/java/QtJambiCore.java | 223 ++- .../typesystem/qml/QtCore.qml | 197 +- .../QtJambiGenerator/typesystem/qml/QtGui.qml | 20 + .../QtJambiGenerator/typesystem/qml/QtPdf.qml | 33 + .../typesystem/qml/QtTextToSpeech.qml | 48 +- .../typesystem/qml_abstractobject.h | 19 +- .../typesystem/qmltypesystemreader.cpp | 11 +- .../typesystem/xmltypesystemreader.cpp | 3 +- .../io/qt/tools/ant/InitializeBuildTask.java | 2 +- .../qtjambi/Qt5/io/qt/core/QLinkedList.java | 84 +- .../modules/qtjambi/Qt5/io/qt/core/QList.java | 186 +- .../qtjambi/Qt5/io/qt/core/QVector.java | 171 +- .../modules/qtjambi/Qt6/io/qt/core/QList.java | 235 ++- .../io/qt/core/QAssociativeConstIterator.java | 66 +- .../main/io/qt/core/QAssociativeIterator.java | 24 + .../main/io/qt/core/QDeclarableSignals.java | 4 + .../qtjambi/main/io/qt/core/QException.java | 2 +- .../main/io/qt/core/QFutureSynchronizer.java | 1 - .../qtjambi/main/io/qt/core/QHash.java | 107 +- .../io/qt/core/QInstanceMemberSignals.java | 1 + .../qtjambi/main/io/qt/core/QLogging.java | 73 +- .../modules/qtjambi/main/io/qt/core/QMap.java | 107 +- .../qtjambi/main/io/qt/core/QMultiHash.java | 106 +- .../qtjambi/main/io/qt/core/QMultiMap.java | 107 +- .../io/qt/core/QSequentialConstIterator.java | 45 +- .../main/io/qt/core/QSequentialIterator.java | 15 + .../modules/qtjambi/main/io/qt/core/QSet.java | 49 +- .../main/io/qt/core/QStaticMemberSignals.java | 4 + .../main/io/qt/internal/LibraryUtility.java | 268 ++- .../io/qt/internal/MetaObjectUtility.java | 45 +- .../main/io/qt/internal/SignalUtility.java | 232 +-- www/Android.md | 20 +- www/Characteristics-of-QtJambi.md | 39 +- www/How-to-bundle-Qt-libraries.md | 12 +- www/How-to-deploy-QtJambi-applications.md | 36 +- www/How-to-develop-Qt-in-Java.md | 35 +- www/Modules.md | 1754 +++++++++-------- www/Whats-New.md | 15 +- 82 files changed, 3514 insertions(+), 2278 deletions(-) diff --git a/README.md b/README.md index 303b9c3c..ffdce66f 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ Make yourself familiar with [developing applications with QtJambi](www/How-to-de ### Requirements * [Apache Ant](https://ant.apache.org/) (min. 1.10.x) -* Java Development Kit (e.g. [OpenJDK](https://adoptopenjdk.net/), tested with Java 1.8 and 18) +* Java Development Kit (e.g. [OpenJDK](https://adoptopenjdk.net/), tested with Java 1.8 and 20) * Qt 5.15 or 6.x (using the Qt Online Installer) * Minimum required Qt modules: QtCore, QtQml, QtNetwork, QtConcurrent and QtXml * C++ compiler and make (Gcc, Clang, MSVC2019) @@ -57,7 +57,7 @@ This saves compilation time. Although QtJambi build process requires the availab `> set PATH=...\apache-ant-1.10.3\bin;%PATH%` -`> set QTDIR=C:\Qt\6.5.0\msvc2019_64` +`> set QTDIR=C:\Qt\6.5.1\msvc2019_64` #### Pre-Build Steps On Linux and macOS @@ -67,9 +67,9 @@ This saves compilation time. Although QtJambi build process requires the availab `> export JAVA_HOME_TARGET=path to your java jdk` -`> export QTDIR=/opt/Qt/6.5.0/gcc_64` on Linux +`> export QTDIR=/opt/Qt/6.5.1/gcc_64` on Linux -`> export QTDIR=/opt/Qt/6.5.0/macos` on macOS +`> export QTDIR=/opt/Qt/6.5.1/macos` on macOS #### Building Bindings @@ -92,11 +92,11 @@ This saves compilation time. Although QtJambi build process requires the availab After building QtJambi for the running operation system you can additionally cross-compile QtJambi for other platforms. For instance if you want to build for Android use the following command (on Windows): -`> ant -Dqmake=C:\Qt\6.5.0\android_x86_64\bin\qmake.bat library.native` +`> ant -Dqmake=C:\Qt\6.5.1\android_x86_64\bin\qmake.bat library.native` or if you want to build for Linux arm: -`> ant -Dqmake=/opt/Qt/6.5.0/arm-gnueabi/bin/qmake library.native` +`> ant -Dqmake=/opt/Qt/6.5.1/arm-gnueabi/bin/qmake library.native` Just specify the third-platform cross-compiled qmake with `-Dqmake=path`. @@ -115,7 +115,7 @@ to your project: $VERSION ``` -(exchange `$VERSION` either by `5.15.14` or by `6.5.0`). +(exchange `$VERSION` either by `5.15.15` or by `6.5.1`). Otherwise, download QtJambi JAR file from [Maven Central Repository](https://search.maven.org/artifact/io.qtjambi/qtjambi/). @@ -135,7 +135,7 @@ public class Test { Compile the file: ``` powershell -javac -cp qtjambi-6.5.0.jar Test.java +javac -cp qtjambi-6.5.1.jar Test.java ``` ### Execute Example @@ -154,19 +154,19 @@ In case your Linux distribution provides Qt (of correct version) as system libra The example program can be executed this way on Windows: ``` powershell -java -cp qtjambi-6.5.0.jar;. -Djava.library.path=C:\Qt\6.5.0\msvc2019_64\bin Test +java -cp qtjambi-6.5.1.jar;. -Djava.library.path=C:\Qt\6.5.1\msvc2019_64\bin Test ``` On Linux it looks this way: ``` bash -java -cp qtjambi-6.5.0.jar:. -Djava.library.path=/Qt/6.5.0/gcc_64/lib Test +java -cp qtjambi-6.5.1.jar:. -Djava.library.path=/Qt/6.5.1/gcc_64/lib Test ``` On macOS you additionally need to use the start parameter -XstartOnFirstThread: ``` bash -java -cp qtjambi-6.5.0.jar:. -Djava.library.path=/Qt/6.5.0/macos/lib -XstartOnFirstThread Test +java -cp qtjambi-6.5.1.jar:. -Djava.library.path=/Qt/6.5.1/macos/lib -XstartOnFirstThread Test ``` In general, you can start learning how to use Qt in Java [as it is introduced for C++](https://doc.qt.io/qt-6/gettingstarted.html#create-your-first-applications). diff --git a/src/cpp/QtJambi/containeraccess_list.cpp b/src/cpp/QtJambi/containeraccess_list.cpp index d48b9352..f3e2aafc 100644 --- a/src/cpp/QtJambi/containeraccess_list.cpp +++ b/src/cpp/QtJambi/containeraccess_list.cpp @@ -1299,9 +1299,6 @@ void AutoListAccess::remove(JNIEnv *, void* container, jint index, jint n) Q_ASSERT(n==1); QListData* p = reinterpret_cast(container); if (index < 0 || index >= p->size()) { -#if !defined(QT_NO_DEBUG) - qWarning("QList::removeAt(): Index out of range."); -#endif return; } detach(p); diff --git a/src/cpp/QtJambi/containeraccess_vector.cpp b/src/cpp/QtJambi/containeraccess_vector.cpp index a4ba4ce6..894db35b 100644 --- a/src/cpp/QtJambi/containeraccess_vector.cpp +++ b/src/cpp/QtJambi/containeraccess_vector.cpp @@ -1027,9 +1027,6 @@ void AutoVectorAccess::remove(JNIEnv *, void* container, jint index, jint n){ QTypedArrayData ** vector = reinterpret_cast **>(container); QTypedArrayData*& d = *vector; if (index < 0 || index+n > d->size) { -#if !defined(QT_NO_DEBUG) - qWarning("QVector::removeAt(): Index out of range."); -#endif return; } erase(vector, d->data() + index * m_offset, d->data() + (index+n) * m_offset); diff --git a/src/cpp/QtJambi/containers.cpp b/src/cpp/QtJambi/containers.cpp index b5f252a1..73715255 100644 --- a/src/cpp/QtJambi/containers.cpp +++ b/src/cpp/QtJambi/containers.cpp @@ -1277,6 +1277,10 @@ T& checkedUnref(T* t){ void CoreAPI::initializeQList(JNIEnv *env, jobject object, jclass elementType, QtJambiNativeID elementMetaTypeId, jobject other){ QMetaType& elementMetaType = checkedUnref(QtJambiAPI::objectFromNativeId(elementMetaTypeId)); + if(elementMetaType.id()==QMetaType::UnknownType) + Java::Runtime::IllegalArgumentException::throwNew(env, QStringLiteral("QMetaType::UnknownType cannot be type of %1.").arg("QList") QTJAMBI_STACKTRACEINFO ); + if(elementMetaType.id()==QMetaType::Void) + Java::Runtime::IllegalArgumentException::throwNew(env, QStringLiteral("void cannot be type of %1.").arg("QList") QTJAMBI_STACKTRACEINFO ); SuperTypeInfos superTypeInfos = SuperTypeInfos::fromClass(env, env->GetObjectClass(object)); if(superTypeInfos.size()>1) Java::Runtime::Error::throwNew(env, QStringLiteral("It is not permitted to create a derived type of %1 implementing any Qt interface.").arg("QList") QTJAMBI_STACKTRACEINFO ); @@ -1390,6 +1394,12 @@ void CoreAPI::initializeQList(JNIEnv *env, jobject object, jclass elementType, Q void CoreAPI::initializeQSet(JNIEnv *env, jobject object, jclass elementType, QtJambiNativeID elementMetaTypeId, jobject other){ QMetaType& elementMetaType = checkedUnref(QtJambiAPI::objectFromNativeId(elementMetaTypeId)); + if(elementMetaType.id()==QMetaType::UnknownType) + Java::Runtime::IllegalArgumentException::throwNew(env, QStringLiteral("QMetaType::UnknownType cannot be type of %1.").arg("QSet") QTJAMBI_STACKTRACEINFO ); + if(elementMetaType.id()==QMetaType::QVariant) + Java::Runtime::IllegalArgumentException::throwNew(env, QStringLiteral("QVariant cannot be type of %1.").arg("QSet") QTJAMBI_STACKTRACEINFO ); + if(elementMetaType.id()==QMetaType::Void) + Java::Runtime::IllegalArgumentException::throwNew(env, QStringLiteral("void cannot be type of %1.").arg("QSet") QTJAMBI_STACKTRACEINFO ); SuperTypeInfos superTypeInfos = SuperTypeInfos::fromClass(env, env->GetObjectClass(object)); if(superTypeInfos.size()>1) Java::Runtime::Error::throwNew(env, QStringLiteral("It is not permitted to create a derived type of %1 implementing any Qt interface.").arg("QSet") QTJAMBI_STACKTRACEINFO ); @@ -1550,6 +1560,10 @@ void CoreAPI::initializeQSet(JNIEnv *env, jobject object, jclass elementType, Qt #if QT_VERSION < QT_VERSION_CHECK(6,0,0) void CoreAPI::initializeQLinkedList(JNIEnv *env, jobject object, jclass elementType, QtJambiNativeID elementMetaTypeId, jobject other){ QMetaType& elementMetaType = checkedUnref(QtJambiAPI::objectFromNativeId(elementMetaTypeId)); + if(elementMetaType.id()==QMetaType::UnknownType) + Java::Runtime::IllegalArgumentException::throwNew(env, QStringLiteral("QMetaType::UnknownType cannot be type of %1.").arg("QLinkedList") QTJAMBI_STACKTRACEINFO ); + if(elementMetaType.id()==QMetaType::Void) + Java::Runtime::IllegalArgumentException::throwNew(env, QStringLiteral("void cannot be type of %1.").arg("QLinkedList") QTJAMBI_STACKTRACEINFO ); SuperTypeInfos superTypeInfos = SuperTypeInfos::fromClass(env, env->GetObjectClass(object)); if(superTypeInfos.size()>1) Java::Runtime::Error::throwNew(env, QStringLiteral("It is not permitted to create a derived type of %1 implementing any Qt interface.").arg("QLinkedList") QTJAMBI_STACKTRACEINFO ); @@ -1700,6 +1714,10 @@ void CoreAPI::initializeQLinkedList(JNIEnv *env, jobject object, jclass elementT void CoreAPI::initializeQVector(JNIEnv *env, jobject object, jclass elementType, QtJambiNativeID elementMetaTypeId, jobject other){ QMetaType& elementMetaType = checkedUnref(QtJambiAPI::objectFromNativeId(elementMetaTypeId)); + if(elementMetaType.id()==QMetaType::UnknownType) + Java::Runtime::IllegalArgumentException::throwNew(env, QStringLiteral("QMetaType::UnknownType cannot be type of %1.").arg("QVector") QTJAMBI_STACKTRACEINFO ); + if(elementMetaType.id()==QMetaType::Void) + Java::Runtime::IllegalArgumentException::throwNew(env, QStringLiteral("void cannot be type of %1.").arg("QVector") QTJAMBI_STACKTRACEINFO ); SuperTypeInfos superTypeInfos = SuperTypeInfos::fromClass(env, env->GetObjectClass(object)); if(superTypeInfos.size()>1) Java::Runtime::Error::throwNew(env, QStringLiteral("It is not permitted to create a derived type of %1 implementing any Qt interface.").arg("QVector") QTJAMBI_STACKTRACEINFO ); @@ -1850,6 +1868,14 @@ void CoreAPI::initializeQVector(JNIEnv *env, jobject object, jclass elementType, void CoreAPI::initializeQHash(JNIEnv *env, jobject object, jclass keyType, QtJambiNativeID keyMetaTypeId, jclass valueType, QtJambiNativeID valueMetaTypeId, jobject other){ QMetaType& keyMetaType = checkedUnref(QtJambiAPI::objectFromNativeId(keyMetaTypeId)); QMetaType& valueMetaType = checkedUnref(QtJambiAPI::objectFromNativeId(valueMetaTypeId)); + if(keyMetaType.id()==QMetaType::UnknownType) + Java::Runtime::IllegalArgumentException::throwNew(env, QStringLiteral("QMetaType::UnknownType cannot be key type of %1.").arg("QHash") QTJAMBI_STACKTRACEINFO ); + if(keyMetaType.id()==QMetaType::Void) + Java::Runtime::IllegalArgumentException::throwNew(env, QStringLiteral("void cannot be key type of %1.").arg("QHash") QTJAMBI_STACKTRACEINFO ); + if(valueMetaType.id()==QMetaType::UnknownType) + Java::Runtime::IllegalArgumentException::throwNew(env, QStringLiteral("QMetaType::UnknownType cannot be value type of %1.").arg("QHash") QTJAMBI_STACKTRACEINFO ); + if(valueMetaType.id()==QMetaType::Void) + Java::Runtime::IllegalArgumentException::throwNew(env, QStringLiteral("void cannot be value type of %1.").arg("QHash") QTJAMBI_STACKTRACEINFO ); SuperTypeInfos superTypeInfos = SuperTypeInfos::fromClass(env, env->GetObjectClass(object)); if(superTypeInfos.size()>1) Java::Runtime::Error::throwNew(env, QStringLiteral("It is not permitted to create a derived type of %1 implementing any Qt interface.").arg("QHash") QTJAMBI_STACKTRACEINFO ); @@ -2009,6 +2035,14 @@ void CoreAPI::initializeQHash(JNIEnv *env, jobject object, jclass keyType, QtJam void CoreAPI::initializeQMultiHash(JNIEnv *env, jobject object, jclass keyType, QtJambiNativeID keyMetaTypeId, jclass valueType, QtJambiNativeID valueMetaTypeId, jobject other){ QMetaType& keyMetaType = checkedUnref(QtJambiAPI::objectFromNativeId(keyMetaTypeId)); QMetaType& valueMetaType = checkedUnref(QtJambiAPI::objectFromNativeId(valueMetaTypeId)); + if(keyMetaType.id()==QMetaType::UnknownType) + Java::Runtime::IllegalArgumentException::throwNew(env, QStringLiteral("QMetaType::UnknownType cannot be key type of %1.").arg("QMultiHash") QTJAMBI_STACKTRACEINFO ); + if(keyMetaType.id()==QMetaType::Void) + Java::Runtime::IllegalArgumentException::throwNew(env, QStringLiteral("void cannot be key type of %1.").arg("QMultiHash") QTJAMBI_STACKTRACEINFO ); + if(valueMetaType.id()==QMetaType::UnknownType) + Java::Runtime::IllegalArgumentException::throwNew(env, QStringLiteral("QMetaType::UnknownType cannot be value type of %1.").arg("QMultiHash") QTJAMBI_STACKTRACEINFO ); + if(valueMetaType.id()==QMetaType::Void) + Java::Runtime::IllegalArgumentException::throwNew(env, QStringLiteral("void cannot be value type of %1.").arg("QMultiHash") QTJAMBI_STACKTRACEINFO ); SuperTypeInfos superTypeInfos = SuperTypeInfos::fromClass(env, env->GetObjectClass(object)); if(superTypeInfos.size()>1) Java::Runtime::Error::throwNew(env, QStringLiteral("It is not permitted to create a derived type of %1 implementing any Qt interface.").arg("QMultiHash") QTJAMBI_STACKTRACEINFO ); @@ -2171,6 +2205,14 @@ void CoreAPI::initializeQMultiHash(JNIEnv *env, jobject object, jclass keyType, void CoreAPI::initializeQMap(JNIEnv *env, jobject object, jclass keyType, QtJambiNativeID keyMetaTypeId, jclass valueType, QtJambiNativeID valueMetaTypeId, jobject other){ QMetaType& keyMetaType = checkedUnref(QtJambiAPI::objectFromNativeId(keyMetaTypeId)); QMetaType& valueMetaType = checkedUnref(QtJambiAPI::objectFromNativeId(valueMetaTypeId)); + if(keyMetaType.id()==QMetaType::UnknownType) + Java::Runtime::IllegalArgumentException::throwNew(env, QStringLiteral("QMetaType::UnknownType cannot be key type of %1.").arg("QMap") QTJAMBI_STACKTRACEINFO ); + if(keyMetaType.id()==QMetaType::Void) + Java::Runtime::IllegalArgumentException::throwNew(env, QStringLiteral("void cannot be key type of %1.").arg("QMap") QTJAMBI_STACKTRACEINFO ); + if(valueMetaType.id()==QMetaType::UnknownType) + Java::Runtime::IllegalArgumentException::throwNew(env, QStringLiteral("QMetaType::UnknownType cannot be value type of %1.").arg("QMap") QTJAMBI_STACKTRACEINFO ); + if(valueMetaType.id()==QMetaType::Void) + Java::Runtime::IllegalArgumentException::throwNew(env, QStringLiteral("void cannot be value type of %1.").arg("QMap") QTJAMBI_STACKTRACEINFO ); SuperTypeInfos superTypeInfos = SuperTypeInfos::fromClass(env, env->GetObjectClass(object)); if(superTypeInfos.size()>1) Java::Runtime::Error::throwNew(env, QStringLiteral("It is not permitted to create a derived type of %1 implementing any Qt interface.").arg("QMap") QTJAMBI_STACKTRACEINFO ); @@ -2328,6 +2370,14 @@ void CoreAPI::initializeQMap(JNIEnv *env, jobject object, jclass keyType, QtJamb void CoreAPI::initializeQMultiMap(JNIEnv *env, jobject object, jclass keyType, QtJambiNativeID keyMetaTypeId, jclass valueType, QtJambiNativeID valueMetaTypeId, jobject other){ QMetaType& keyMetaType = checkedUnref(QtJambiAPI::objectFromNativeId(keyMetaTypeId)); QMetaType& valueMetaType = checkedUnref(QtJambiAPI::objectFromNativeId(valueMetaTypeId)); + if(keyMetaType.id()==QMetaType::UnknownType) + Java::Runtime::IllegalArgumentException::throwNew(env, QStringLiteral("QMetaType::UnknownType cannot be key type of %1.").arg("QMultiMap") QTJAMBI_STACKTRACEINFO ); + if(keyMetaType.id()==QMetaType::Void) + Java::Runtime::IllegalArgumentException::throwNew(env, QStringLiteral("void cannot be key type of %1.").arg("QMultiMap") QTJAMBI_STACKTRACEINFO ); + if(valueMetaType.id()==QMetaType::UnknownType) + Java::Runtime::IllegalArgumentException::throwNew(env, QStringLiteral("QMetaType::UnknownType cannot be value type of %1.").arg("QMultiMap") QTJAMBI_STACKTRACEINFO ); + if(valueMetaType.id()==QMetaType::Void) + Java::Runtime::IllegalArgumentException::throwNew(env, QStringLiteral("void cannot be value type of %1.").arg("QMultiMap") QTJAMBI_STACKTRACEINFO ); SuperTypeInfos superTypeInfos = SuperTypeInfos::fromClass(env, env->GetObjectClass(object)); if(superTypeInfos.size()>1) Java::Runtime::Error::throwNew(env, QStringLiteral("It is not permitted to create a derived type of %1 implementing any Qt interface.").arg("QMultiMap") QTJAMBI_STACKTRACEINFO ); diff --git a/src/cpp/QtJambi/convert.cpp b/src/cpp/QtJambi/convert.cpp index 0a7d644d..a239c4fa 100644 --- a/src/cpp/QtJambi/convert.cpp +++ b/src/cpp/QtJambi/convert.cpp @@ -44,13 +44,6 @@ template jobject convertEnumToJavaObject(JNIEnv *env, INT qt_enum, jclass cl, const QString& className, jobject (*resolveEnum)(JNIEnv *, jint, jclass, INT, jstring)) { -#if defined(QTJAMBI_DEBUG_TOOLS) - if(!cl) { - fprintf(stderr, "convertEnumToJavaObject(): %s NOTFOUND\n", qPrintable(className)); - fflush(stderr); - qWarning("convertEnumToJavaObject(): %s NOTFOUND", qPrintable(className)); - } -#endif Q_ASSERT(cl); jobject obj; @@ -439,7 +432,7 @@ jobject QtJambiAPI::convertQVariantToJavaObject(JNIEnv *env, const QVariant &qt_ jvalue val; val.l = nullptr; if(!converter || !converter(env, nullptr, qt_variant.constData(), &val, true)){ - qWarning("Unable to convert qVariant to jobject"); + qCWarning(DebugAPI::internalCategory, "Unable to convert qVariant to jobject"); } return val.l; } @@ -1730,7 +1723,7 @@ QVariant internal_convertJavaObjectToQVariant(JNIEnv *env, jobject java_object, val.l = java_object; bool result = converter(env, &scope, val, ptr, jValueType::l); if(!result){ - qWarning("Cannot convert external type '%s' to '%s'", + qCWarning(DebugAPI::internalCategory, "Cannot convert external type '%s' to '%s'", qPrintable(fullJavaName.replace("/", ".").replace("$", ".")), qPrintable(qtName)); return QVariant(META_TYPE(QMetaType::UnknownType), nullptr); @@ -2317,7 +2310,7 @@ jobject internal_convertQObjectSmartPointerToJavaObject_notype(JNIEnv *env, cons } env->DeleteLocalRef(nativeLink); if (!link) { - qWarning("Qt Jambi: Couldn't created wrapper for class %s", className); + qCWarning(DebugAPI::internalCategory, "Qt Jambi: Couldn't created wrapper for class %s", className); return nullptr; } }else{ @@ -2411,7 +2404,7 @@ jobject internal_convertQObjectSmartPointerToJavaObject_notype(JNIEnv *env, cons link = QtJambiLink::createLinkForSmartPointerToQObject(env, object, false, false, const_cast(ptr_shared_pointer), shared_pointer_deleter, pointerGetter); if (!link) { - qWarning("Qt Jambi: Couldn't created wrapper for class %s", className); + qCWarning(DebugAPI::internalCategory, "Qt Jambi: Couldn't created wrapper for class %s", className); return nullptr; } } @@ -2612,18 +2605,18 @@ jobject internal_convertQObjectToJavaObject_notype(JNIEnv *env, const QObject *c obj = env->NewObject(clazz, constructorId, 0); JavaException::check(env QTJAMBI_STACKTRACEINFO ); if (!obj){ - qWarning("Qt Jambi: Couldn't created object of class %s", qPrintable(java_name)); + qCWarning(DebugAPI::internalCategory, "Qt Jambi: Couldn't created object of class %s", qPrintable(java_name)); return nullptr; } } }else{ - qWarning("Qt Jambi: Couldn't find java class %s", qPrintable(java_name)); + qCWarning(DebugAPI::internalCategory, "Qt Jambi: Couldn't find java class %s", qPrintable(java_name)); return nullptr; } link = QtJambiLink::createLinkForQObject(env, obj, qt_object, false, false); if (!link) { - qWarning("Qt Jambi: Couldn't created wrapper for class %s", qPrintable(java_name)); + qCWarning(DebugAPI::internalCategory, "Qt Jambi: Couldn't created wrapper for class %s", qPrintable(java_name)); return nullptr; } } diff --git a/src/cpp/QtJambi/coreapi.cpp b/src/cpp/QtJambi/coreapi.cpp index 0cf2d28d..38a05e68 100644 --- a/src/cpp/QtJambi/coreapi.cpp +++ b/src/cpp/QtJambi/coreapi.cpp @@ -454,7 +454,7 @@ jboolean CoreAPI::writeMetaPropertyOnGadget(JNIEnv *env, jobject _this, jobject void *copy = nullptr; QtJambiScope scope(nullptr); if(!(success = converter(env, &scope, val, copy, jValueType::l))){ - qWarning("Cannot convert external type '%s' to '%s'", + qCWarning(DebugAPI::internalCategory, "Cannot convert external type '%s' to '%s'", qPrintable(QString(QtJambiAPI::getObjectClassName(env, value)).replace("$", ".")), qPrintable(qtName)); return false; @@ -482,7 +482,7 @@ jboolean CoreAPI::writeMetaPropertyOnGadget(JNIEnv *env, jobject _this, jobject void *copy = nullptr; QtJambiScope scope(nullptr); if(!converter(env, &scope, val, copy, jValueType::l)){ - qWarning("Cannot convert external type '%s' to '%s'", + qCWarning(DebugAPI::internalCategory, "Cannot convert external type '%s' to '%s'", qPrintable(QString(QLatin1String(fullJavaName)).replace("/", ".").replace("$", ".")), qPrintable(qtName)); return false; diff --git a/src/cpp/QtJambi/debug.cpp b/src/cpp/QtJambi/debug.cpp index aef52b4f..a4b4a052 100644 --- a/src/cpp/QtJambi/debug.cpp +++ b/src/cpp/QtJambi/debug.cpp @@ -54,11 +54,22 @@ const char * adaptFile(const char *file){ namespace DebugAPI{ +Q_LOGGING_CATEGORY(internalCategory, "io.qtjambi.internal") Q_LOGGING_CATEGORY(debugAPICategory, "io.qtjambi.debugapi") Q_LOGGING_CATEGORY(debugAPIInternalMethodsCategory, "io.qtjambi.debugapi.internal") Q_LOGGING_CATEGORY(debugAPIJavaOverloadsCategory, "io.qtjambi.debugapi.java-overloads") Q_LOGGING_CATEGORY(debugAPINativeCallsCategory, "io.qtjambi.debugapi.native-calls") +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) +#define QTJAMBI_DEBUG_MESSAGE_LOGGER(category) \ +for (bool qt_category_enabled = category().isDebugEnabled(); qt_category_enabled; qt_category_enabled = false) \ + QMessageLogger(adaptFile(file), line, function, category().categoryName()).debug().nospace().noquote() +#else +#define QTJAMBI_DEBUG_MESSAGE_LOGGER(category) \ +for (QLoggingCategoryMacroHolder qt_category(&category); qt_category; qt_category.control = false) \ + QMessageLogger(adaptFile(file), line, function, qt_category.name()).debug().nospace().noquote() +#endif + bool enabledMethodTracePrints(){ static bool b = []()->bool{ if(JniEnvironment env{200}) @@ -100,45 +111,45 @@ class MethodPrintPrivate{ switch(callType){ case MethodPrint::JavaToNativeCall: if(isEnter){ - QMessageLogger(adaptFile(file), line, function).debug(debugAPIJavaOverloadsCategory).nospace().noquote() << "ENTER: Java calling native method " << method << " on object " << pointer << " in thread tid=" << quintptr(QThread::currentThreadId()); + QTJAMBI_DEBUG_MESSAGE_LOGGER(debugAPIJavaOverloadsCategory) << "ENTER: Java calling native method " << method << " on object " << pointer << " in thread tid=" << quintptr(QThread::currentThreadId()); }else{ - QMessageLogger(adaptFile(file), line, function).debug(debugAPIJavaOverloadsCategory).nospace().noquote() << "LEAVE: Java calling native method " << method << " on object " << pointer << " in thread tid=" << quintptr(QThread::currentThreadId()); + QTJAMBI_DEBUG_MESSAGE_LOGGER(debugAPIJavaOverloadsCategory) << "LEAVE: Java calling native method " << method << " on object " << pointer << " in thread tid=" << quintptr(QThread::currentThreadId()); } break; case MethodPrint::NativeToJavaCall: if(isEnter){ - QMessageLogger(adaptFile(file), line, function).debug(debugAPIJavaOverloadsCategory).nospace().noquote() << "ENTER: Shell (object: " << pointer << ") calling java method " << method << " in thread tid=" << quintptr(QThread::currentThreadId()); + QTJAMBI_DEBUG_MESSAGE_LOGGER(debugAPIJavaOverloadsCategory) << "ENTER: Shell (object: " << pointer << ") calling java method " << method << " in thread tid=" << quintptr(QThread::currentThreadId()); }else{ - QMessageLogger(adaptFile(file), line, function).debug(debugAPIJavaOverloadsCategory).nospace().noquote() << "LEAVE: Shell (object: " << pointer << ") calling java method " << method << " in thread tid=" << quintptr(QThread::currentThreadId()); + QTJAMBI_DEBUG_MESSAGE_LOGGER(debugAPIJavaOverloadsCategory) << "LEAVE: Shell (object: " << pointer << ") calling java method " << method << " in thread tid=" << quintptr(QThread::currentThreadId()); } break; case MethodPrint::LibraryInitialization: if(isEnter){ - QMessageLogger(adaptFile(file), line, function).debug(debugAPIInternalMethodsCategory).nospace().noquote() << "ENTER: Initializing " << method << " on object " << pointer << " in thread tid=" << quintptr(QThread::currentThreadId()); + QTJAMBI_DEBUG_MESSAGE_LOGGER(debugAPIInternalMethodsCategory) << "ENTER: Initializing " << method << " on object " << pointer << " in thread tid=" << quintptr(QThread::currentThreadId()); }else{ - QMessageLogger(adaptFile(file), line, function).debug(debugAPIInternalMethodsCategory).nospace().noquote() << "LEAVE: Initializing " << method << " on object " << pointer << " in thread tid=" << quintptr(QThread::currentThreadId()); + QTJAMBI_DEBUG_MESSAGE_LOGGER(debugAPIInternalMethodsCategory) << "LEAVE: Initializing " << method << " on object " << pointer << " in thread tid=" << quintptr(QThread::currentThreadId()); } break; case MethodPrint::Internal:{ if(isEnter){ - QMessageLogger(adaptFile(file), line, function).debug(debugAPIInternalMethodsCategory).nospace().noquote() << "ENTER: " << method << " on object " << pointer << " in thread tid=" << quintptr(QThread::currentThreadId()); + QTJAMBI_DEBUG_MESSAGE_LOGGER(debugAPIInternalMethodsCategory) << "ENTER: " << method << " on object " << pointer << " in thread tid=" << quintptr(QThread::currentThreadId()); }else{ - QMessageLogger(adaptFile(file), line, function).debug(debugAPIInternalMethodsCategory).nospace().noquote() << "LEAVE: " << method << " on object " << pointer << " in thread tid=" << quintptr(QThread::currentThreadId()); + QTJAMBI_DEBUG_MESSAGE_LOGGER(debugAPIInternalMethodsCategory) << "LEAVE: " << method << " on object " << pointer << " in thread tid=" << quintptr(QThread::currentThreadId()); } break; } case MethodPrint::ConstructorCall: if(isEnter){ - QMessageLogger(adaptFile(file), line, function).debug(debugAPIInternalMethodsCategory).nospace().noquote() << "ENTER: Constructor call " << method << " on object " << pointer << " in thread tid=" << quintptr(QThread::currentThreadId()); + QTJAMBI_DEBUG_MESSAGE_LOGGER(debugAPIInternalMethodsCategory) << "ENTER: Constructor call " << method << " on object " << pointer << " in thread tid=" << quintptr(QThread::currentThreadId()); }else{ - QMessageLogger(adaptFile(file), line, function).debug(debugAPIInternalMethodsCategory).nospace().noquote() << "LEAVE: Constructor call " << method << " on object " << pointer << " in thread tid=" << quintptr(QThread::currentThreadId()); + QTJAMBI_DEBUG_MESSAGE_LOGGER(debugAPIInternalMethodsCategory) << "LEAVE: Constructor call " << method << " on object " << pointer << " in thread tid=" << quintptr(QThread::currentThreadId()); } break; case MethodPrint::DestructorCall: if(isEnter){ - QMessageLogger(adaptFile(file), line, function).debug(debugAPIInternalMethodsCategory).nospace().noquote() << "ENTER: Destuctor call " << method << " on object " << pointer << " in thread tid=" << quintptr(QThread::currentThreadId()); + QTJAMBI_DEBUG_MESSAGE_LOGGER(debugAPIInternalMethodsCategory) << "ENTER: Destuctor call " << method << " on object " << pointer << " in thread tid=" << quintptr(QThread::currentThreadId()); }else{ - QMessageLogger(adaptFile(file), line, function).debug(debugAPIInternalMethodsCategory).nospace().noquote() << "LEAVE: Destuctor call " << method << " on object " << pointer << " in thread tid=" << quintptr(QThread::currentThreadId()); + QTJAMBI_DEBUG_MESSAGE_LOGGER(debugAPIInternalMethodsCategory) << "LEAVE: Destuctor call " << method << " on object " << pointer << " in thread tid=" << quintptr(QThread::currentThreadId()); } break; default:break; @@ -147,45 +158,45 @@ class MethodPrintPrivate{ switch(callType){ case MethodPrint::JavaToNativeCall: if(isEnter){ - QMessageLogger(adaptFile(file), line, function).debug(debugAPIJavaOverloadsCategory).nospace().noquote() << "ENTER: Java calling native method " << method << " in thread tid=" << quintptr(QThread::currentThreadId()); + QTJAMBI_DEBUG_MESSAGE_LOGGER(debugAPIJavaOverloadsCategory) << "ENTER: Java calling native method " << method << " in thread tid=" << quintptr(QThread::currentThreadId()); }else{ - QMessageLogger(adaptFile(file), line, function).debug(debugAPIJavaOverloadsCategory).nospace().noquote() << "LEAVE: Java calling native method " << method << " in thread tid=" << quintptr(QThread::currentThreadId()); + QTJAMBI_DEBUG_MESSAGE_LOGGER(debugAPIJavaOverloadsCategory) << "LEAVE: Java calling native method " << method << " in thread tid=" << quintptr(QThread::currentThreadId()); } break; case MethodPrint::NativeToJavaCall: if(isEnter){ - QMessageLogger(adaptFile(file), line, function).debug(debugAPIJavaOverloadsCategory).nospace().noquote() << "ENTER: Shell calling java method " << method << " in thread tid=" << quintptr(QThread::currentThreadId()); + QTJAMBI_DEBUG_MESSAGE_LOGGER(debugAPIJavaOverloadsCategory) << "ENTER: Shell calling java method " << method << " in thread tid=" << quintptr(QThread::currentThreadId()); }else{ - QMessageLogger(adaptFile(file), line, function).debug(debugAPIJavaOverloadsCategory).nospace().noquote() << "LEAVE: Shell calling java method " << method << " in thread tid=" << quintptr(QThread::currentThreadId()); + QTJAMBI_DEBUG_MESSAGE_LOGGER(debugAPIJavaOverloadsCategory) << "LEAVE: Shell calling java method " << method << " in thread tid=" << quintptr(QThread::currentThreadId()); } break; case MethodPrint::LibraryInitialization: if(isEnter){ - QMessageLogger(adaptFile(file), line, function).debug(debugAPIInternalMethodsCategory).nospace().noquote() << "ENTER: Initializing " << method << " in thread tid=" << quintptr(QThread::currentThreadId()); + QTJAMBI_DEBUG_MESSAGE_LOGGER(debugAPIInternalMethodsCategory) << "ENTER: Initializing " << method << " in thread tid=" << quintptr(QThread::currentThreadId()); }else{ - QMessageLogger(adaptFile(file), line, function).debug(debugAPIInternalMethodsCategory).nospace().noquote() << "LEAVE: Initializing " << method << " in thread tid=" << quintptr(QThread::currentThreadId()); + QTJAMBI_DEBUG_MESSAGE_LOGGER(debugAPIInternalMethodsCategory) << "LEAVE: Initializing " << method << " in thread tid=" << quintptr(QThread::currentThreadId()); } break; case MethodPrint::Internal:{ if(isEnter){ - QMessageLogger(adaptFile(file), line, function).debug(debugAPIInternalMethodsCategory).nospace().noquote() << "ENTER: " << method << " in thread tid=" << quintptr(QThread::currentThreadId()); + QTJAMBI_DEBUG_MESSAGE_LOGGER(debugAPIInternalMethodsCategory) << "ENTER: " << method << " in thread tid=" << quintptr(QThread::currentThreadId()); }else{ - QMessageLogger(adaptFile(file), line, function).debug(debugAPIInternalMethodsCategory).nospace().noquote() << "LEAVE: " << method << " in thread tid=" << quintptr(QThread::currentThreadId()); + QTJAMBI_DEBUG_MESSAGE_LOGGER(debugAPIInternalMethodsCategory) << "LEAVE: " << method << " in thread tid=" << quintptr(QThread::currentThreadId()); } break; } case MethodPrint::ConstructorCall: if(isEnter){ - QMessageLogger(adaptFile(file), line, function).debug(debugAPIInternalMethodsCategory).nospace().noquote() << "ENTER: Constructor call " << method << " in thread tid=" << quintptr(QThread::currentThreadId()); + QTJAMBI_DEBUG_MESSAGE_LOGGER(debugAPIInternalMethodsCategory) << "ENTER: Constructor call " << method << " in thread tid=" << quintptr(QThread::currentThreadId()); }else{ - QMessageLogger(adaptFile(file), line, function).debug(debugAPIInternalMethodsCategory).nospace().noquote() << "LEAVE: Constructor call " << method << " in thread tid=" << quintptr(QThread::currentThreadId()); + QTJAMBI_DEBUG_MESSAGE_LOGGER(debugAPIInternalMethodsCategory) << "LEAVE: Constructor call " << method << " in thread tid=" << quintptr(QThread::currentThreadId()); } break; case MethodPrint::DestructorCall: if(isEnter){ - QMessageLogger(adaptFile(file), line, function).debug(debugAPIInternalMethodsCategory).nospace().noquote() << "ENTER: Destuctor call " << method << " in thread tid=" << quintptr(QThread::currentThreadId()); + QTJAMBI_DEBUG_MESSAGE_LOGGER(debugAPIInternalMethodsCategory) << "ENTER: Destuctor call " << method << " in thread tid=" << quintptr(QThread::currentThreadId()); }else{ - QMessageLogger(adaptFile(file), line, function).debug(debugAPIInternalMethodsCategory).nospace().noquote() << "LEAVE: Destuctor call " << method << " in thread tid=" << quintptr(QThread::currentThreadId()); + QTJAMBI_DEBUG_MESSAGE_LOGGER(debugAPIInternalMethodsCategory) << "LEAVE: Destuctor call " << method << " in thread tid=" << quintptr(QThread::currentThreadId()); } break; default:break; @@ -198,7 +209,7 @@ class MethodPrintPrivate{ } static void printImpl(const QString& message, const char *file, int line, const char *function) { - QMessageLogger(adaptFile(file), line, function).debug(debugAPICategory).nospace().noquote() << message << " in thread tid=" << quintptr(QThread::currentThreadId()); + QMessageLogger(adaptFile(file), line, function).debug(debugAPICategory) << message << " in thread tid=" << quintptr(QThread::currentThreadId()); } static void print(const char *message, const char *file, int line, const char *function) { @@ -239,30 +250,30 @@ void printWithType(bool isEnter, MethodPrint::Type callType, const void* pointer switch(callType){ case MethodPrint::NativeToJavaCall: if(isEnter){ - QMessageLogger(adaptFile(file), line, function).debug(debugAPIJavaOverloadsCategory).nospace().noquote() << "ENTER: Shell (object: " << pointer << " , type: " << typeName << ") calling java method " << method << " in thread tid=" << quintptr(QThread::currentThreadId()); + QTJAMBI_DEBUG_MESSAGE_LOGGER(debugAPIJavaOverloadsCategory) << "ENTER: Shell (object: " << pointer << " , type: " << typeName << ") calling java method " << method << " in thread tid=" << quintptr(QThread::currentThreadId()); }else{ - QMessageLogger(adaptFile(file), line, function).debug(debugAPIJavaOverloadsCategory).nospace().noquote() << "LEAVE: Shell (object: " << pointer << " , type: " << typeName << ") calling java method " << method << " in thread tid=" << quintptr(QThread::currentThreadId()); + QTJAMBI_DEBUG_MESSAGE_LOGGER(debugAPIJavaOverloadsCategory) << "LEAVE: Shell (object: " << pointer << " , type: " << typeName << ") calling java method " << method << " in thread tid=" << quintptr(QThread::currentThreadId()); } break; case MethodPrint::Internal: if(isEnter){ - QMessageLogger(adaptFile(file), line, function).debug(debugAPIInternalMethodsCategory).nospace().noquote() << "ENTER: " << method << " on object " << pointer << " of type " << typeName << " in thread tid=" << quintptr(QThread::currentThreadId()); + QTJAMBI_DEBUG_MESSAGE_LOGGER(debugAPIInternalMethodsCategory) << "ENTER: " << method << " on object " << pointer << " of type " << typeName << " in thread tid=" << quintptr(QThread::currentThreadId()); }else{ - QMessageLogger(adaptFile(file), line, function).debug(debugAPIInternalMethodsCategory).nospace().noquote() << "LEAVE: " << method << " on object " << pointer << " of type " << typeName << " in thread tid=" << quintptr(QThread::currentThreadId()); + QTJAMBI_DEBUG_MESSAGE_LOGGER(debugAPIInternalMethodsCategory) << "LEAVE: " << method << " on object " << pointer << " of type " << typeName << " in thread tid=" << quintptr(QThread::currentThreadId()); } break; case MethodPrint::ConstructorCall: if(isEnter){ - QMessageLogger(adaptFile(file), line, function).debug(debugAPIInternalMethodsCategory).nospace().noquote() << "ENTER: Constructor call " << method << " on object " << pointer << " of type " << typeName << " in thread tid=" << quintptr(QThread::currentThreadId()); + QTJAMBI_DEBUG_MESSAGE_LOGGER(debugAPIInternalMethodsCategory) << "ENTER: Constructor call " << method << " on object " << pointer << " of type " << typeName << " in thread tid=" << quintptr(QThread::currentThreadId()); }else{ - QMessageLogger(adaptFile(file), line, function).debug(debugAPIInternalMethodsCategory).nospace().noquote() << "LEAVE: Constructor call " << method << " on object " << pointer << " of type " << typeName << " in thread tid=" << quintptr(QThread::currentThreadId()); + QTJAMBI_DEBUG_MESSAGE_LOGGER(debugAPIInternalMethodsCategory) << "LEAVE: Constructor call " << method << " on object " << pointer << " of type " << typeName << " in thread tid=" << quintptr(QThread::currentThreadId()); } break; case MethodPrint::DestructorCall: if(isEnter){ - QMessageLogger(adaptFile(file), line, function).debug(debugAPIInternalMethodsCategory).nospace().noquote() << "ENTER: Destuctor call " << method << " on object " << pointer << " of type " << typeName << " in thread tid=" << quintptr(QThread::currentThreadId()); + QTJAMBI_DEBUG_MESSAGE_LOGGER(debugAPIInternalMethodsCategory) << "ENTER: Destuctor call " << method << " on object " << pointer << " of type " << typeName << " in thread tid=" << quintptr(QThread::currentThreadId()); }else{ - QMessageLogger(adaptFile(file), line, function).debug(debugAPIInternalMethodsCategory).nospace().noquote() << "LEAVE: Destuctor call " << method << " on object " << pointer << " of type " << typeName << " in thread tid=" << quintptr(QThread::currentThreadId()); + QTJAMBI_DEBUG_MESSAGE_LOGGER(debugAPIInternalMethodsCategory) << "LEAVE: Destuctor call " << method << " on object " << pointer << " of type " << typeName << " in thread tid=" << quintptr(QThread::currentThreadId()); } break; default: @@ -272,30 +283,30 @@ void printWithType(bool isEnter, MethodPrint::Type callType, const void* pointer switch(callType){ case MethodPrint::NativeToJavaCall: if(isEnter){ - QMessageLogger(adaptFile(file), line, function).debug(debugAPIJavaOverloadsCategory).nospace().noquote() << "ENTER: Shell (type: " << typeName << ") calling java method " << method << " in thread tid=" << quintptr(QThread::currentThreadId()); + QTJAMBI_DEBUG_MESSAGE_LOGGER(debugAPIJavaOverloadsCategory) << "ENTER: Shell (type: " << typeName << ") calling java method " << method << " in thread tid=" << quintptr(QThread::currentThreadId()); }else{ - QMessageLogger(adaptFile(file), line, function).debug(debugAPIJavaOverloadsCategory).nospace().noquote() << "LEAVE: Shell (type: " << typeName << ") calling java method " << method << " in thread tid=" << quintptr(QThread::currentThreadId()); + QTJAMBI_DEBUG_MESSAGE_LOGGER(debugAPIJavaOverloadsCategory) << "LEAVE: Shell (type: " << typeName << ") calling java method " << method << " in thread tid=" << quintptr(QThread::currentThreadId()); } break; case MethodPrint::Internal: if(isEnter){ - QMessageLogger(adaptFile(file), line, function).debug(debugAPIInternalMethodsCategory).nospace().noquote() << "ENTER: " << method << " for object of type " << typeName << " in thread tid=" << quintptr(QThread::currentThreadId()); + QTJAMBI_DEBUG_MESSAGE_LOGGER(debugAPIInternalMethodsCategory) << "ENTER: " << method << " for object of type " << typeName << " in thread tid=" << quintptr(QThread::currentThreadId()); }else{ - QMessageLogger(adaptFile(file), line, function).debug(debugAPIInternalMethodsCategory).nospace().noquote() << "LEAVE: " << method << " for object of type " << typeName << " in thread tid=" << quintptr(QThread::currentThreadId()); + QTJAMBI_DEBUG_MESSAGE_LOGGER(debugAPIInternalMethodsCategory) << "LEAVE: " << method << " for object of type " << typeName << " in thread tid=" << quintptr(QThread::currentThreadId()); } break; case MethodPrint::ConstructorCall: if(isEnter){ - QMessageLogger(adaptFile(file), line, function).debug(debugAPIInternalMethodsCategory).nospace().noquote() << "ENTER: Constructor call " << method << " on object of type " << typeName << " in thread tid=" << quintptr(QThread::currentThreadId()); + QTJAMBI_DEBUG_MESSAGE_LOGGER(debugAPIInternalMethodsCategory) << "ENTER: Constructor call " << method << " on object of type " << typeName << " in thread tid=" << quintptr(QThread::currentThreadId()); }else{ - QMessageLogger(adaptFile(file), line, function).debug(debugAPIInternalMethodsCategory).nospace().noquote() << "LEAVE: Constructor call " << method << " on object of type " << typeName << " in thread tid=" << quintptr(QThread::currentThreadId()); + QTJAMBI_DEBUG_MESSAGE_LOGGER(debugAPIInternalMethodsCategory) << "LEAVE: Constructor call " << method << " on object of type " << typeName << " in thread tid=" << quintptr(QThread::currentThreadId()); } break; case MethodPrint::DestructorCall: if(isEnter){ - QMessageLogger(adaptFile(file), line, function).debug(debugAPIInternalMethodsCategory).nospace().noquote() << "ENTER: Destuctor call " << method << " on object of type " << typeName << " in thread tid=" << quintptr(QThread::currentThreadId()); + QTJAMBI_DEBUG_MESSAGE_LOGGER(debugAPIInternalMethodsCategory) << "ENTER: Destuctor call " << method << " on object of type " << typeName << " in thread tid=" << quintptr(QThread::currentThreadId()); }else{ - QMessageLogger(adaptFile(file), line, function).debug(debugAPIInternalMethodsCategory).nospace().noquote() << "LEAVE: Destuctor call " << method << " on object of type " << typeName << " in thread tid=" << quintptr(QThread::currentThreadId()); + QTJAMBI_DEBUG_MESSAGE_LOGGER(debugAPIInternalMethodsCategory) << "LEAVE: Destuctor call " << method << " on object of type " << typeName << " in thread tid=" << quintptr(QThread::currentThreadId()); } break; default: diff --git a/src/cpp/QtJambi/debugapi.h b/src/cpp/QtJambi/debugapi.h index f7161379..857cd7df 100644 --- a/src/cpp/QtJambi/debugapi.h +++ b/src/cpp/QtJambi/debugapi.h @@ -41,7 +41,7 @@ class QtJambiShell; #ifdef QT_NO_DEBUG #if defined(Q_ASSERT) && defined(QT_FORCE_ASSERTS) # undef Q_ASSERT -# define Q_ASSERT(cond) ((cond) ? static_cast(0) : qtjambi_assert(#cond, __FILE__, __LINE__, __FUNCTION__)) +# define Q_ASSERT(cond) ((cond) ? static_cast(0) : qtjambi_assert(#cond, __FILE__, __LINE__, Q_FUNC_INFO)) #endif #endif @@ -72,40 +72,40 @@ class QTJAMBI_EXPORT MethodPrint { }; } -# define QTJAMBI_DEBUG_PRINT(message) DebugAPI::print(message, __FILE__, __LINE__, __FUNCTION__); +# define QTJAMBI_DEBUG_PRINT(message) DebugAPI::print(message, __FILE__, __LINE__, Q_FUNC_INFO); #if defined(Q_ASSERT) # undef Q_ASSERT # if defined(QT_NO_DEBUG) && !defined(QT_FORCE_ASSERTS) # define Q_ASSERT(cond) static_cast(false && (cond)) # else -# define Q_ASSERT(cond) ((cond) ? static_cast(0) : qtjambi_assert(#cond, __FILE__, __LINE__, __FUNCTION__)) +# define Q_ASSERT(cond) ((cond) ? static_cast(0) : qtjambi_assert(#cond, __FILE__, __LINE__, Q_FUNC_INFO)) # endif #endif #define QTJAMBI_INTERNAL_INSTANCE_METHOD_CALL_1(methodname)\ -DebugAPI::MethodPrint __debug_method_print(DebugAPI::MethodPrint::Internal, this, methodname, __FILE__, __LINE__, __FUNCTION__); +DebugAPI::MethodPrint __debug_method_print(DebugAPI::MethodPrint::Internal, this, methodname, __FILE__, __LINE__, Q_FUNC_INFO); #define QTJAMBI_INTERNAL_METHOD_CALL(methodname)\ -DebugAPI::MethodPrint __debug_method_print(DebugAPI::MethodPrint::Internal, nullptr, methodname, __FILE__, __LINE__, __FUNCTION__); +DebugAPI::MethodPrint __debug_method_print(DebugAPI::MethodPrint::Internal, nullptr, methodname, __FILE__, __LINE__, Q_FUNC_INFO); #define QTJAMBI_NATIVE_METHOD_CALL(methodname)\ -DebugAPI::MethodPrint __debug_method_print(DebugAPI::MethodPrint::JavaToNativeCall, nullptr, methodname, __FILE__, __LINE__, __FUNCTION__); +DebugAPI::MethodPrint __debug_method_print(DebugAPI::MethodPrint::JavaToNativeCall, nullptr, methodname, __FILE__, __LINE__, Q_FUNC_INFO); #define QTJAMBI_NATIVE_INSTANCE_METHOD_CALL(methodname, _this)\ -DebugAPI::MethodPrint __debug_method_print(DebugAPI::MethodPrint::JavaToNativeCall, _this, methodname, __FILE__, __LINE__, __FUNCTION__); +DebugAPI::MethodPrint __debug_method_print(DebugAPI::MethodPrint::JavaToNativeCall, _this, methodname, __FILE__, __LINE__, Q_FUNC_INFO); #define QTJAMBI_LIBRARY_INITIALIZATION_METHOD_CALL(methodname)\ -DebugAPI::MethodPrint __debug_method_print(DebugAPI::MethodPrint::LibraryInitialization, nullptr, methodname, __FILE__, __LINE__, __FUNCTION__); +DebugAPI::MethodPrint __debug_method_print(DebugAPI::MethodPrint::LibraryInitialization, nullptr, methodname, __FILE__, __LINE__, Q_FUNC_INFO); #define QTJAMBI_JAVA_METHOD_CALL_1(methodname)\ -DebugAPI::MethodPrint __debug_method_print(DebugAPI::MethodPrint::NativeToJavaCall, this, methodname, __FILE__, __LINE__, __FUNCTION__); +DebugAPI::MethodPrint __debug_method_print(DebugAPI::MethodPrint::NativeToJavaCall, this, methodname, __FILE__, __LINE__, Q_FUNC_INFO); #define QTJAMBI_IN_DESTRUCTOR_CALL_1(methodname)\ -DebugAPI::MethodPrint __debug_method_print(DebugAPI::MethodPrint::DestructorCall, this, methodname, __FILE__, __LINE__, __FUNCTION__); +DebugAPI::MethodPrint __debug_method_print(DebugAPI::MethodPrint::DestructorCall, this, methodname, __FILE__, __LINE__, Q_FUNC_INFO); #define QTJAMBI_IN_CONSTRUCTOR_CALL_1(methodname)\ -DebugAPI::MethodPrint __debug_method_print(DebugAPI::MethodPrint::ConstructorCall, this, methodname, __FILE__, __LINE__, __FUNCTION__); +DebugAPI::MethodPrint __debug_method_print(DebugAPI::MethodPrint::ConstructorCall, this, methodname, __FILE__, __LINE__, Q_FUNC_INFO); #if defined(QTJAMBI_DEBUG_TOOLS) || defined(QTJAMBI_LINK_NAME) namespace DebugAPI{ @@ -120,13 +120,13 @@ class QTJAMBI_EXPORT MethodPrintWithType { } #define QTJAMBI_INTERNAL_INSTANCE_METHOD_CALL_2(methodname, shell)\ -DebugAPI::MethodPrintWithType __debug_method_print(DebugAPI::MethodPrint::Internal, methodname, shell, __FILE__, __LINE__, __FUNCTION__); +DebugAPI::MethodPrintWithType __debug_method_print(DebugAPI::MethodPrint::Internal, methodname, shell, __FILE__, __LINE__, Q_FUNC_INFO); #define QTJAMBI_JAVA_METHOD_CALL_2(methodname, shell)\ -DebugAPI::MethodPrintWithType __debug_method_print(DebugAPI::MethodPrint::NativeToJavaCall, methodname, shell, __FILE__, __LINE__, __FUNCTION__); +DebugAPI::MethodPrintWithType __debug_method_print(DebugAPI::MethodPrint::NativeToJavaCall, methodname, shell, __FILE__, __LINE__, Q_FUNC_INFO); #define QTJAMBI_IN_DESTRUCTOR_CALL_2(methodname, shell)\ -DebugAPI::MethodPrintWithType __debug_method_print(DebugAPI::MethodPrint::DestructorCall, methodname, shell, __FILE__, __LINE__, __FUNCTION__); +DebugAPI::MethodPrintWithType __debug_method_print(DebugAPI::MethodPrint::DestructorCall, methodname, shell, __FILE__, __LINE__, Q_FUNC_INFO); #define QTJAMBI_IN_CONSTRUCTOR_CALL_2(methodname, shell)\ -DebugAPI::MethodPrintWithType __debug_method_print(DebugAPI::MethodPrint::ConstructorCall, methodname, shell, __FILE__, __LINE__, __FUNCTION__); +DebugAPI::MethodPrintWithType __debug_method_print(DebugAPI::MethodPrint::ConstructorCall, methodname, shell, __FILE__, __LINE__, Q_FUNC_INFO); #define QTJAMBI_INTERNAL_INSTANCE_METHOD_CALL(...) QT_OVERLOADED_MACRO(QTJAMBI_INTERNAL_INSTANCE_METHOD_CALL, __VA_ARGS__) #define QTJAMBI_JAVA_METHOD_CALL(...) QT_OVERLOADED_MACRO(QTJAMBI_JAVA_METHOD_CALL, __VA_ARGS__) diff --git a/src/cpp/QtJambi/events.cpp b/src/cpp/QtJambi/events.cpp index 948fcdaa..fe2c0c3d 100644 --- a/src/cpp/QtJambi/events.cpp +++ b/src/cpp/QtJambi/events.cpp @@ -604,7 +604,7 @@ bool eventNotifier(QObject *receiver, QEvent *event, bool* result) link->setDefaultOwnership(env); } } else if (event->type() == QEvent::ChildAdded) { - qWarning("'%s' [%s] was garbage collected before it was reparented to '%s' [%s]", + qCWarning(DebugAPI::internalCategory, "'%s' [%s] was garbage collected before it was reparented to '%s' [%s]", qPrintable(e->child()->objectName()), e->child()->metaObject()->className(), qPrintable(receiver->objectName()), receiver->metaObject()->className()); } @@ -629,7 +629,7 @@ bool eventNotifier(QObject *receiver, QEvent *event, bool* result) QThreadData *threadData = d->threadData; QScopedScopeLevelCounter scopeLevelCounter(threadData); if (receiver == nullptr) { // serious error - qWarning("QCoreApplication::notify: Unexpected null receiver"); + qCWarning(DebugAPI::internalCategory, "QCoreApplication::notify: Unexpected null receiver"); return true; } #ifndef QT_NO_DEBUG diff --git a/src/cpp/QtJambi/exception.cpp b/src/cpp/QtJambi/exception.cpp index 1e768c47..153f1671 100644 --- a/src/cpp/QtJambi/exception.cpp +++ b/src/cpp/QtJambi/exception.cpp @@ -36,6 +36,7 @@ #include "jobjectwrapper.h" #include "exception.h" #include "java_p.h" +#include "utils_p.h" #include "qtjambi_cast.h" class JavaExceptionPrivate : public QSharedData{ @@ -417,9 +418,9 @@ struct ExceptionHandler{ printf("An exception occured in ExceptionUtility.reportException(...): %s\n", _exn.what()); } }else if(methodName){ - qWarning("An exception occured in %s: %s", methodName, exn.what()); + qCWarning(DebugAPI::internalCategory, "An exception occured in %s: %s", methodName, exn.what()); }else{ - qWarning("An exception occured: %s", exn.what()); + qCWarning(DebugAPI::internalCategory, "An exception occured: %s", exn.what()); } } } @@ -452,9 +453,9 @@ void QtJambiExceptionHandler::handle(JNIEnv *env, const JavaException& exn, cons env = currentJNIEnvironment(); if(!env){ if(methodName){ - qWarning("An exception occured in %s: %s", methodName, exn.what()); + qCWarning(DebugAPI::internalCategory, "An exception occured in %s: %s", methodName, exn.what()); }else{ - qWarning("An exception occured: %s", exn.what()); + qCWarning(DebugAPI::internalCategory, "An exception occured: %s", exn.what()); } return; }else{ @@ -493,9 +494,9 @@ void QtJambiExceptionInhibitor::handle(JNIEnv *env, const JavaException& exn, co env = currentJNIEnvironment(); if(!env){ if(methodName){ - qWarning("An exception occured in %s: %s", methodName, exn.what()); + qCWarning(DebugAPI::internalCategory, "An exception occured in %s: %s", methodName, exn.what()); }else{ - qWarning("An exception occured: %s", exn.what()); + qCWarning(DebugAPI::internalCategory, "An exception occured: %s", exn.what()); } return; }else{ @@ -514,9 +515,9 @@ void QtJambiExceptionInhibitor::handle(JNIEnv *env, const JavaException& exn, co env = currentJNIEnvironment(); if(!env){ if(methodName){ - qWarning("An exception occured in %s: %s", methodName, exn.what()); + qCWarning(DebugAPI::internalCategory, "An exception occured in %s: %s", methodName, exn.what()); }else{ - qWarning("An exception occured: %s", exn.what()); + qCWarning(DebugAPI::internalCategory, "An exception occured: %s", exn.what()); } return; } @@ -564,9 +565,9 @@ void QtJambiExceptionBlocker::release(JNIEnv *env){ env = currentJNIEnvironment(); if(!env){ if(methodName){ - qWarning("An exception occured in %s: %s", methodName, exn.what()); + qCWarning(DebugAPI::internalCategory, "An exception occured in %s: %s", methodName, exn.what()); }else{ - qWarning("An exception occured: %s", exn.what()); + qCWarning(DebugAPI::internalCategory, "An exception occured: %s", exn.what()); } return; } diff --git a/src/cpp/QtJambi/fileengine.cpp b/src/cpp/QtJambi/fileengine.cpp index 0c8647ad..72f98ff6 100644 --- a/src/cpp/QtJambi/fileengine.cpp +++ b/src/cpp/QtJambi/fileengine.cpp @@ -38,6 +38,7 @@ #include "qtjambiapi.h" #include "jobjectwrapper.h" #include "java_p.h" +#include "utils_p.h" #ifdef Q_OS_ANDROID #include @@ -1105,15 +1106,13 @@ QString QClassPathEngine::fileName(FileName file) const { if(QAbstractFileEngine* afe = engines.value(0)){ QString classPathEntry; if (engines.size() == 1) { - /*if (QFSFileEngine* fsf = dynamic_cast(afe)){ - return fsf->fileName(file); - }else*/ if (QClassPathEntry* cpe = dynamic_cast(afe)) + if (QClassPathEntry* cpe = dynamic_cast(afe)) classPathEntry = cpe->classPathEntryName(); else{ if(JniEnvironment env{200}){ - JavaException::raiseRuntimeException(env, "Bogus engine in class path file engine" QTJAMBI_STACKTRACEINFO ); + JavaException::raiseRuntimeException(env, "Wrong engine type in class path file engine" QTJAMBI_STACKTRACEINFO ); }else{ - qWarning("Bogus engine in class path file engine"); + qCWarning(DebugAPI::internalCategory) << "Wrong engine type in class path file engine"; } } } else { diff --git a/src/cpp/QtJambi/functionpointer.cpp b/src/cpp/QtJambi/functionpointer.cpp index 31bb9854..8a123e28 100644 --- a/src/cpp/QtJambi/functionpointer.cpp +++ b/src/cpp/QtJambi/functionpointer.cpp @@ -39,6 +39,7 @@ #include #include #include +#include "utils_p.h" typedef decltype(std::declval>().size()) size_type; @@ -210,7 +211,7 @@ QFunctionPointer extractFunction( ? QString(QLatin1String("GenericFunction")) : QString(QLatin1String("Generic%1Function")).arg(functionParamTypeInfos.size()-1); QString funTypeName = QtJambiAPI::typeName(functionTypeId); - //qDebug() << "trying to find function " << funTypeName; + //qCDebug(DebugAPI::internalCategory) << "trying to find function " << funTypeName; if(!QFileInfo::exists(":/io/qt/qtjambi/functionpointers/"+funTypeName)){ for(const FunctionParamTypeInfo& info : functionParamTypeInfos){ if(!info.isPointer @@ -241,7 +242,7 @@ QFunctionPointer extractFunction( } } - //qDebug() << "found: " << typeName; + //qCDebug(DebugAPI::internalCategory) << "found: " << typeName; QString tmpFile = gLibraries->dir->filePath("~"+QUuid::createUuid().toString(QUuid::Id128)+".tmp"); if(QFile::copy(":/io/qt/qtjambi/functionpointers/"+typeName, tmpFile)){ std::unique_ptr library(new QLibrary(tmpFile)); @@ -263,13 +264,13 @@ QFunctionPointer extractFunction( gLibraries->libraries[typeName] << QExplicitlySharedDataPointer(libFile); }else{ library->unload(); - qWarning() << "Unable to find initialize function for " << typeName << "."; + qCWarning(DebugAPI::internalCategory) << "Unable to find initialize function for " << typeName << "."; } }else{ - qWarning() << "Unable to create function pointer. " << library->errorString(); + qCWarning(DebugAPI::internalCategory) << "Unable to create function pointer. " << library->errorString(); } }else{ - qWarning() << "Unable to copy library to " << tmpFile; + qCWarning(DebugAPI::internalCategory) << "Unable to copy library to " << tmpFile; } return result; } diff --git a/src/cpp/QtJambi/java.cpp b/src/cpp/QtJambi/java.cpp index e560438b..855b2800 100644 --- a/src/cpp/QtJambi/java.cpp +++ b/src/cpp/QtJambi/java.cpp @@ -1254,6 +1254,11 @@ QTJAMBI_REPOSITORY_DEFINE_CLASS(io/qt/internal,MetaObjectData$IntArray, QTJAMBI_REPOSITORY_DEFINE_FIELD(size,I) ) +QTJAMBI_REPOSITORY_DEFINE_CLASS(io/qt/internal,MetaObjectData$MetaTypeInfo, + QTJAMBI_REPOSITORY_DEFINE_FIELD(metaTypeId,I) + QTJAMBI_REPOSITORY_DEFINE_FIELD(typeName,Ljava/lang/String;) +) + QTJAMBI_REPOSITORY_DEFINE_CLASS(io/qt/internal,MetaObjectData, QTJAMBI_REPOSITORY_DEFINE_FIELD(intData,Lio/qt/internal/MetaObjectData$IntArray;) QTJAMBI_REPOSITORY_DEFINE_FIELD(stringData,Ljava/util/List;) diff --git a/src/cpp/QtJambi/java_p.h b/src/cpp/QtJambi/java_p.h index 6b6dd110..b2ab05dc 100644 --- a/src/cpp/QtJambi/java_p.h +++ b/src/cpp/QtJambi/java_p.h @@ -382,6 +382,11 @@ namespace Java{ QTJAMBI_REPOSITORY_DECLARE_INT_FIELD(size) ) + QTJAMBI_REPOSITORY_DECLARE_CLASS(MetaObjectData$MetaTypeInfo, + QTJAMBI_REPOSITORY_DECLARE_INT_FIELD(metaTypeId) + QTJAMBI_REPOSITORY_DECLARE_STRING_FIELD(typeName) + ) + QTJAMBI_REPOSITORY_DECLARE_CLASS(MetaObjectData, QTJAMBI_REPOSITORY_DECLARE_OBJECT_FIELD(intData) QTJAMBI_REPOSITORY_DECLARE_OBJECT_FIELD(stringData) diff --git a/src/cpp/QtJambi/javaarrays.cpp b/src/cpp/QtJambi/javaarrays.cpp index 12abf71d..f5889d49 100644 --- a/src/cpp/QtJambi/javaarrays.cpp +++ b/src/cpp/QtJambi/javaarrays.cpp @@ -154,7 +154,7 @@ J##Type##ArrayPointer::~J##Type##ArrayPointer()\ try{\ ArrayPointerDEL(Type)\ } catch (const std::exception& e) {\ - qWarning("%s", e.what());\ + qCWarning(DebugAPI::internalCategory, "%s", e.what());\ } catch (...) {\ }\ } @@ -205,7 +205,7 @@ JBooleanArrayPointer::~JBooleanArrayPointer() } } } catch (const std::exception& e) { - qWarning("%s", e.what()); + qCWarning(DebugAPI::internalCategory, "%s", e.what()); } catch (...) { } } diff --git a/src/cpp/QtJambi/javabuffers.cpp b/src/cpp/QtJambi/javabuffers.cpp index 80665784..c2115e2b 100644 --- a/src/cpp/QtJambi/javabuffers.cpp +++ b/src/cpp/QtJambi/javabuffers.cpp @@ -267,7 +267,7 @@ JBufferConstData::~JBufferConstData(){ } } } catch (const std::exception& e) { - qWarning("%s", e.what()); + qCWarning(DebugAPI::internalCategory, "%s", e.what()); } catch (...) { } } @@ -409,7 +409,7 @@ JBufferData::~JBufferData(){ } } } catch (const std::exception& e) { - qWarning("%s", e.what()); + qCWarning(DebugAPI::internalCategory, "%s", e.what()); } catch (...) { } } diff --git a/src/cpp/QtJambi/javainvalidate.cpp b/src/cpp/QtJambi/javainvalidate.cpp index f62468ec..b5999c27 100644 --- a/src/cpp/QtJambi/javainvalidate.cpp +++ b/src/cpp/QtJambi/javainvalidate.cpp @@ -95,7 +95,7 @@ struct InvalidateObjectAfterUsePrivate : InvalidateAfterUsePrivate{ m_object = nullptr; __exnHandler.handle(m_env, exn, nullptr); } catch (const std::exception& e) { - qWarning("%s", e.what()); + qCWarning(DebugAPI::internalCategory, "%s", e.what()); } catch (...) { } if(m_object) @@ -123,7 +123,7 @@ struct InvalidateNativeIDAfterUsePrivate : InvalidateAfterUsePrivate{ }catch(const JavaException& exn){ __exnHandler.handle(m_env, exn, nullptr); } catch (const std::exception& e) { - qWarning("%s", e.what()); + qCWarning(DebugAPI::internalCategory, "%s", e.what()); } catch (...) { } } @@ -173,7 +173,7 @@ InvalidateContainerAfterUse::~InvalidateContainerAfterUse() m_object = nullptr; __exnHandler.handle(m_env, exn, nullptr); } catch (const std::exception& e) { - qWarning("%s", e.what()); + qCWarning(DebugAPI::internalCategory, "%s", e.what()); } catch (...) { } if(m_object) @@ -194,7 +194,7 @@ InvalidateArrayAfterUse::~InvalidateArrayAfterUse() }catch(const JavaException& exn){ __exnHandler.handle(m_env, exn, nullptr); } catch (const std::exception& e) { - qWarning("%s", e.what()); + qCWarning(DebugAPI::internalCategory, "%s", e.what()); } catch (...) { } } diff --git a/src/cpp/QtJambi/jni_metatype.cpp b/src/cpp/QtJambi/jni_metatype.cpp index ef2e31e1..d3a7dad9 100644 --- a/src/cpp/QtJambi/jni_metatype.cpp +++ b/src/cpp/QtJambi/jni_metatype.cpp @@ -130,7 +130,8 @@ QTJAMBI_FUNCTION_PREFIX(Java_io_qt_internal_MetaTypeUtility_registerRefMetaType) #endif } }else if(isReference){ - if(typeName.endsWith("*")){ + return 0; +/* if(typeName.endsWith("*")){ typeName.chop(1); int id = qRegisterMetaType("JObjectWrapper"); #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) @@ -145,6 +146,53 @@ QTJAMBI_FUNCTION_PREFIX(Java_io_qt_internal_MetaTypeUtility_registerRefMetaType) #else QMetaType::registerNormalizedTypedef(typeName, QMetaType(id)); return id; +#endif + } + */ + if(!typeName.endsWith("&") + && !typeName.contains("(&)") + && !typeName.contains("(__cdecl&)")){ + if(!typeName.endsWith("&")){ + typeName = QMetaObject::normalizedType(typeName + "&"); + } + QMetaType::TypeFlags flags; +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + QMetaType::Destructor destructor = &destructHelper; + QMetaType::Constructor constructor = &pointerConstructHelper; + int typeId = QMetaType::registerNormalizedType( + typeName, + destructor, + constructor, + sizeof(void*), + flags, + metaType.metaObject() + ); + RegistryAPI::registerComparator(new QtPrivate::BuiltInComparatorFunction(), typeId); + return typeId; +#else + QMetaType _metaType = createMetaType(typeName, + true, + /*.defaultCtr=*/ nullptr, + /*.copyCtr=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::copyCtr, + /*.moveCtr=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::moveCtr, + /*.dtor=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::dtor, + /*.equals=*/ QtPrivate::QEqualityOperatorForType::equals, + /*.lessThan=*/ QtPrivate::QLessThanOperatorForType::lessThan, + /*.debugStream=*/ QtPrivate::QDebugStreamOperatorForType::debugStream, + /*.dataStreamOut=*/ QtPrivate::QDataStreamOperatorForType::dataStreamOut, + /*.dataStreamIn=*/ QtPrivate::QDataStreamOperatorForType::dataStreamIn, + /*.legacyRegisterOp=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::legacyRegisterOp, + /*.size=*/ sizeof(void*), + /*.alignment=*/ alignof(void*), + /*.typeId=*/ QMetaType::UnknownType, + /*.flags=*/ QMetaType::TypeFlags(flags), + nullptr, + QMetaType(metaType).iface()->metaObjectFn); + _metaType.id(); + if(jclass clazz = CoreAPI::getClassForMetaType(env, metaType)){ + registerConverterVariant(env, _metaType, typeName, QtJambiAPI::getClassName(env, clazz).replace('.', '/'), clazz); + } + return _metaType.id(); #endif } } diff --git a/src/cpp/QtJambi/jni_nativepointer.cpp b/src/cpp/QtJambi/jni_nativepointer.cpp index 1db5d0eb..cfc4cde8 100644 --- a/src/cpp/QtJambi/jni_nativepointer.cpp +++ b/src/cpp/QtJambi/jni_nativepointer.cpp @@ -540,7 +540,7 @@ QTJAMBI_FUNCTION_PREFIX(Java_io_qt_QNativePointer_deletePointer) case jint(QNativePointer::Type::Float): free((reinterpret_cast(ptr))); break; case jint(QNativePointer::Type::Double): free((reinterpret_cast(ptr))); break; default: - qWarning("Unhandled free of type: %d\n", int(type)); + qCWarning(DebugAPI::internalCategory, "Unhandled free of type: %d\n", int(type)); break; } @@ -556,7 +556,7 @@ QTJAMBI_FUNCTION_PREFIX(Java_io_qt_QNativePointer_deletePointer) case jint(QNativePointer::Type::Double): delete ((reinterpret_cast(ptr))); break; case jint(QNativePointer::Type::String): delete ((reinterpret_cast(ptr))); break; default: - qWarning("Unhandled delete of type: %d\n", int(type)); + qCWarning(DebugAPI::internalCategory, "Unhandled delete of type: %d\n", int(type)); break; } @@ -572,7 +572,7 @@ QTJAMBI_FUNCTION_PREFIX(Java_io_qt_QNativePointer_deletePointer) case jint(QNativePointer::Type::Double): delete [] ((reinterpret_cast(ptr))); break; case jint(QNativePointer::Type::String): delete [] ((reinterpret_cast(ptr))); break; default: - qWarning("Unhandled delete [] of type: %d\n", int(type)); + qCWarning(DebugAPI::internalCategory, "Unhandled delete [] of type: %d\n", int(type)); break; } } diff --git a/src/cpp/QtJambi/jni_signals.cpp b/src/cpp/QtJambi/jni_signals.cpp index a35ccae1..be80cf6f 100644 --- a/src/cpp/QtJambi/jni_signals.cpp +++ b/src/cpp/QtJambi/jni_signals.cpp @@ -375,7 +375,24 @@ QTJAMBI_FUNCTION_PREFIX(Java_io_qt_internal_SignalUtility_signalInfo) extern "C" Q_DECL_EXPORT jlong JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_internal_SignalUtility_metaObjectId) (JNIEnv *env, jclass, jobject mo){ - return mo ? Java::QtCore::QMetaObject::metaObjectPointer(env, mo) : 0; + try{ + return mo ? Java::QtCore::QMetaObject::metaObjectPointer(env, mo) : 0; + }catch(const JavaException& exn){ + exn.raiseInJava(env); + return 0; + } +} + +extern "C" Q_DECL_EXPORT jboolean JNICALL +QTJAMBI_FUNCTION_PREFIX(Java_io_qt_internal_SignalUtility_isDynamic) + (JNIEnv *env, jclass, jobject mo){ + try{ + jlong metaObjectId = mo ? Java::QtCore::QMetaObject::metaObjectPointer(env, mo) : 0; + return QtJambiMetaObject::isInstance(reinterpret_cast(metaObjectId)); + }catch(const JavaException& exn){ + exn.raiseInJava(env); + return false; + } } extern "C" Q_DECL_EXPORT void JNICALL @@ -713,10 +730,10 @@ void NativeSlotObject::impl(int which, QSlotObjectBase *this_, QObject *, void * } Java::QtJambi::SignalUtility$AbstractConnection::invoke(env,_this->m_connection.object(), args); } else { - qWarning("SlotObject::CallSignal: Failed to convert arguments"); + qCWarning(DebugAPI::internalCategory, "SlotObject::CallSignal: Failed to convert arguments"); } }else{ - qWarning()<< "SlotObject::CallSignal: Failed to convert method types for signal " << _this->m_signal.methodSignature(); + qCWarning(DebugAPI::internalCategory, )<< "SlotObject::CallSignal: Failed to convert method types for signal " << _this->m_signal.methodSignature(); } } catch (const JavaException& exn) { if(_this->m_nothrow){ diff --git a/src/cpp/QtJambi/jni_utilities.cpp b/src/cpp/QtJambi/jni_utilities.cpp index dc923101..2b62d24f 100644 --- a/src/cpp/QtJambi/jni_utilities.cpp +++ b/src/cpp/QtJambi/jni_utilities.cpp @@ -242,10 +242,10 @@ QTJAMBI_FUNCTION_PREFIX(Java_io_qt_QtUtilities_saveUnixSignalHandlers)(JNIEnv *e struct sigaction sa; memset(&sa, 0, sizeof(sa)); if(sigaction(s, nullptr, &sa)==0){ - qDebug("Signalhandler for %d saved.", s); + qCDebug(DebugAPI::internalCategory, "Signalhandler for %d saved.", s); cache->handlers[s] = {sa.sa_flags, sa.sa_handler}; }else - qDebug("Unable to save signalhandler for %d.", s); + qCDebug(DebugAPI::internalCategory, "Unable to save signalhandler for %d.", s); } QWriteLocker locker(QtJambiLinkUserData::lock()); QTJAMBI_SET_OBJECTUSERDATA(SignalCache, mainThread, cache.release()); @@ -282,11 +282,11 @@ QTJAMBI_FUNCTION_PREFIX(Java_io_qt_QtUtilities_restoreUnixSignalHandlers)(JNIEnv sa.sa_handler = cache->handlers[s].second; if(sigaction(s, &sa, &sa2)==0){ if(sa.sa_handler!=sa2.sa_handler) - qDebug("Signalhandler for %d restored.", s); + qCDebug(DebugAPI::internalCategory, "Signalhandler for %d restored.", s); else - qDebug("Signalhandler for %d unchanged.", s); + qCDebug(DebugAPI::internalCategory, "Signalhandler for %d unchanged.", s); }else - qDebug("Unable to restore signalhandler for %d.", s); + qCDebug(DebugAPI::internalCategory, "Unable to restore signalhandler for %d.", s); } return true; } diff --git a/src/cpp/QtJambi/jnienvironment.cpp b/src/cpp/QtJambi/jnienvironment.cpp index aee83631..4befaf6e 100644 --- a/src/cpp/QtJambi/jnienvironment.cpp +++ b/src/cpp/QtJambi/jnienvironment.cpp @@ -213,9 +213,9 @@ JNIEnv *currentJNIEnvironment(JavaVM *vm, bool initializeJavaThread = true){ if (result != JNI_OK) { if(QThread* mainThread = QCoreApplicationPrivate::theMainThread.loadRelaxed()){ if(mainThread!=currentThread) - qWarning("Failed attaching current thread (%i).", result); + qCWarning(DebugAPI::internalCategory, "Failed attaching current thread (%i).", result); }else{ - qWarning("Failed attaching current thread (%i).", result); + qCWarning(DebugAPI::internalCategory, "Failed attaching current thread (%i).", result); } } if(env && env->functions){ diff --git a/src/cpp/QtJambi/jobjectwrapper.cpp b/src/cpp/QtJambi/jobjectwrapper.cpp index f5f98a10..5a42ab08 100644 --- a/src/cpp/QtJambi/jobjectwrapper.cpp +++ b/src/cpp/QtJambi/jobjectwrapper.cpp @@ -131,7 +131,7 @@ class JArrayWrapperData : public JObjectWrapperData{ } catch (...) {} } } catch (const std::exception& e) { - qWarning("%s", e.what()); + qCWarning(DebugAPI::internalCategory, "%s", e.what()); }catch(...){} } void clear(JNIEnv *env) override{ diff --git a/src/cpp/QtJambi/paint.cpp b/src/cpp/QtJambi/paint.cpp index 296776bb..8ce0dfcc 100644 --- a/src/cpp/QtJambi/paint.cpp +++ b/src/cpp/QtJambi/paint.cpp @@ -33,6 +33,7 @@ #include "paint.h" #include "exception.h" #include "java_p.h" +#include "utils_p.h" AboutToPaint::AboutToPaint(JNIEnv *env, jobject object) : m_env(env), @@ -49,7 +50,7 @@ AboutToPaint::~AboutToPaint() }catch(const JavaException& exn){ __exnHandler.handle(m_env, exn, nullptr); } catch (const std::exception& e) { - qWarning("%s", e.what()); + qCWarning(DebugAPI::internalCategory, "%s", e.what()); } catch (...) { } } diff --git a/src/cpp/QtJambi/qtjambilink.cpp b/src/cpp/QtJambi/qtjambilink.cpp index ef76ac3a..4afdfd8b 100644 --- a/src/cpp/QtJambi/qtjambilink.cpp +++ b/src/cpp/QtJambi/qtjambilink.cpp @@ -315,7 +315,7 @@ QtJambiLinkUserData::~QtJambiLinkUserData() Q_UNUSED(locker) } } catch (const std::exception& e) { - qWarning("%s", e.what()); + qCWarning(DebugAPI::internalCategory, "%s", e.what()); } catch (...) { } } @@ -331,7 +331,7 @@ ValueOwnerUserData::~ValueOwnerUserData(){ try{ m_deleters.takeFirst()(); } catch (const std::exception& e) { - qWarning("%s", e.what()); + qCWarning(DebugAPI::internalCategory, "%s", e.what()); } catch (...) { } } @@ -2485,7 +2485,7 @@ void MetaTypedPointerToContainerLink::deleteNativeObject(JNIEnv *env, bool force QWriteLocker locker(gRefCountStaticLock()); int currentCount = gRefCountHash()->value(m_meta_type, 0) - 1; gRefCountHash()->insert(m_meta_type, currentCount); - qDebug("Deleting QObject [count after: %d]", currentCount); + qCDebug(DebugAPI::internalCategory, "Deleting QObject [count after: %d]", currentCount); } #endif invalidateDependentObjects(env); @@ -2633,7 +2633,7 @@ PointerToObjectLink::~PointerToObjectLink() deleteNativeObject(nullptr); } } catch (const std::exception& e) { - qWarning("%s", e.what()); + qCWarning(DebugAPI::internalCategory, "%s", e.what()); } catch (...) { } } @@ -2942,7 +2942,7 @@ void MetaTypedPointerToObjectLink::deleteNativeObject(JNIEnv *env, bool forced) QWriteLocker locker(gRefCountStaticLock()); int currentCount = gRefCountHash()->value(m_meta_type, 0) - 1; gRefCountHash()->insert(m_meta_type, currentCount); - qDebug("Deleting QObject [count after: %d]", currentCount); + qCDebug(DebugAPI::internalCategory, "Deleting QObject [count after: %d]", currentCount); } #endif invalidateDependentObjects(env); @@ -2969,7 +2969,7 @@ void OwnedMetaTypedPointerToObjectLink::deleteNativeObject(JNIEnv *env, bool for QWriteLocker locker(gRefCountStaticLock()); int currentCount = gRefCountHash()->value(m_meta_type, 0) - 1; gRefCountHash()->insert(m_meta_type, currentCount); - qDebug("Deleting QObject [count after: %d]", currentCount); + qCDebug(DebugAPI::internalCategory, "Deleting QObject [count after: %d]", currentCount); } #endif invalidateDependentObjects(env); @@ -3046,7 +3046,7 @@ void DeletableOwnedPointerToObjectLink::deleteNativeObject(JNIEnv *env, bool for QWriteLocker locker(gRefCountStaticLock()); int currentCount = gRefCountHash()->value(m_meta_type, 0) - 1; gRefCountHash()->insert(m_meta_type, currentCount); - qDebug("Deleting QObject [count after: %d]", currentCount); + qCDebug(DebugAPI::internalCategory, "Deleting QObject [count after: %d]", currentCount); } #endif invalidateDependentObjects(env); @@ -3119,7 +3119,7 @@ void DeletablePointerToContainerLink::deleteNativeObject(JNIEnv *env, bool force QWriteLocker locker(gRefCountStaticLock()); int currentCount = gRefCountHash()->value(m_meta_type, 0) - 1; gRefCountHash()->insert(m_meta_type, currentCount); - qDebug("Deleting QObject [count after: %d]", currentCount); + qCDebug(DebugAPI::internalCategory, "Deleting QObject [count after: %d]", currentCount); } #endif invalidateDependentObjects(env); @@ -3192,7 +3192,7 @@ void DeletablePointerToObjectLink::deleteNativeObject(JNIEnv *env, bool forced) QWriteLocker locker(gRefCountStaticLock()); int currentCount = gRefCountHash()->value(m_meta_type, 0) - 1; gRefCountHash()->insert(m_meta_type, currentCount); - qDebug("Deleting QObject [count after: %d]", currentCount); + qCDebug(DebugAPI::internalCategory, "Deleting QObject [count after: %d]", currentCount); } #endif invalidateDependentObjects(env); @@ -3218,7 +3218,7 @@ void DeletableOwnedPointerToContainerLink::deleteNativeObject(JNIEnv *env, bool QWriteLocker locker(gRefCountStaticLock()); int currentCount = gRefCountHash()->value(m_meta_type, 0) - 1; gRefCountHash()->insert(m_meta_type, currentCount); - qDebug("Deleting QObject [count after: %d]", currentCount); + qCDebug(DebugAPI::internalCategory, "Deleting QObject [count after: %d]", currentCount); } #endif invalidateDependentObjects(env); @@ -3355,7 +3355,7 @@ PointerToQObjectLink::~PointerToQObjectLink() deleteNativeObject(nullptr); } } catch (const std::exception& e) { - qWarning("%s", e.what()); + qCWarning(DebugAPI::internalCategory, "%s", e.what()); } catch (...) { } } @@ -3402,7 +3402,7 @@ void PointerToQObjectLink::deleteNativeObject(JNIEnv *env, bool forced) QWriteLocker locker(gRefCountStaticLock()); int currentCount = gRefCountHash()->value(m_meta_type, 0) - 1; gRefCountHash()->insert(m_meta_type, currentCount); - qDebug("Deleting '%s' [count after: %d]", QMetaType::typeName(m_meta_type), currentCount); + qCDebug(DebugAPI::internalCategory, "Deleting '%s' [count after: %d]", QMetaType::typeName(m_meta_type), currentCount); } #endif unregisterOffsets(); @@ -3415,7 +3415,7 @@ void PointerToQObjectLink::deleteNativeObject(JNIEnv *env, bool forced) // Explicit dispose from current thread, delete object if(!objectThread){ if(m_pointer->parent()){ - qWarning("Skip deletion of QObject '%s' [%s] (thread=none, parent='%s' [%s])", + qCWarning(DebugAPI::internalCategory, "Skip deletion of QObject '%s' [%s] (thread=none, parent='%s' [%s])", qPrintable(m_pointer->objectName()), m_pointer->metaObject()->className(), qPrintable(m_pointer->parent()->objectName()), @@ -3455,21 +3455,21 @@ void PointerToQObjectLink::deleteNativeObject(JNIEnv *env, bool forced) __qt_exceptionBlocker.release(env); }else if(objectThread==m_pointer){ if(objectThread->isRunning()){ - qWarning("Trying to delete a running QThread '%s'", + qCWarning(DebugAPI::internalCategory, "Trying to delete a running QThread '%s'", qPrintable(m_pointer->objectName())); } QtJambiExceptionBlocker __qt_exceptionBlocker; delete m_pointer; __qt_exceptionBlocker.release(env); }else if(m_pointer->parent()){ - qWarning("Skip deletion of QObject '%s' [%s] (thread='%s', parent='%s' [%s])", + qCWarning(DebugAPI::internalCategory, "Skip deletion of QObject '%s' [%s] (thread='%s', parent='%s' [%s])", qPrintable(objectThread->objectName()), qPrintable(m_pointer->objectName()), m_pointer->metaObject()->className(), qPrintable(m_pointer->parent()->objectName()), m_pointer->parent()->metaObject()->className()); }else{ - qWarning("Skip deletion of QObject '%s' [%s] (thread='%s', no parent)", + qCWarning(DebugAPI::internalCategory, "Skip deletion of QObject '%s' [%s] (thread='%s', no parent)", qPrintable(objectThread->objectName()), qPrintable(m_pointer->objectName()), m_pointer->metaObject()->className()); @@ -3509,7 +3509,7 @@ void PointerToQObjectLink::deleteNativeObject(JNIEnv *env, bool forced) __qt_exceptionBlocker.release(env); } }else{ - qWarning("QObjects can only be implicitly garbage collected when owned" + qCWarning(DebugAPI::internalCategory, "QObjects can only be implicitly garbage collected when owned" " by a thread with event dispatcher. Try to delete later. Otherwise, native resource is leaked: '%s' [%s]", qPrintable(m_pointer->objectName()), m_pointer->metaObject()->className()); @@ -3650,7 +3650,7 @@ SmartPointerToObjectLink::~SmartPointerToObjectLink(){ deleteNativeObject(nullptr); } } catch (const std::exception& e) { - qWarning("%s", e.what()); + qCWarning(DebugAPI::internalCategory, "%s", e.what()); } catch (...) { } } @@ -3693,7 +3693,7 @@ void SmartPointerToObjectLink::deleteNativeObject(JNIEnv *env, bool){ QWriteLocker locker(gRefCountStaticLock()); int currentCount = gRefCountHash()->value(m_meta_type, 0) - 1; gRefCountHash()->insert(m_meta_type, currentCount); - qDebug("Deleting '%s' [count after: %d]", QMetaType::typeName(m_meta_type), currentCount); + qCDebug(DebugAPI::internalCategory, "Deleting '%s' [count after: %d]", QMetaType::typeName(m_meta_type), currentCount); } #endif unregisterOffsets(); @@ -3859,7 +3859,7 @@ QSharedPointerToQObjectLink::~QSharedPointerToQObjectLink(){ deleteNativeObject(nullptr); } } catch (const std::exception& e) { - qWarning("%s", e.what()); + qCWarning(DebugAPI::internalCategory, "%s", e.what()); } catch (...) { } if(m_pointerContainer){ @@ -3954,7 +3954,7 @@ void QSharedPointerToQObjectLink::deleteNativeObject(JNIEnv *env, bool){ delete m_pointerContainer; m_pointerContainer = nullptr; }else{ - qWarning("QObjects can only be implicitly garbage collected when owned" + qCWarning(DebugAPI::internalCategory, "QObjects can only be implicitly garbage collected when owned" " by a QThread, native resource ('%s' [%s]) is leaked", qPrintable(m_pointerContainer->qobject()->objectName()), m_pointerContainer->qobject()->metaObject()->className()); @@ -4370,7 +4370,7 @@ PointerContainer::~PointerContainer(){ _link->removePointerContainer(); } } catch (const std::exception& e) { - qWarning("%s", e.what()); + qCWarning(DebugAPI::internalCategory, "%s", e.what()); } catch (...) { } } diff --git a/src/cpp/QtJambi/qtjambimetaobject.cpp b/src/cpp/QtJambi/qtjambimetaobject.cpp index e3c4aa32..9a74436d 100644 --- a/src/cpp/QtJambi/qtjambimetaobject.cpp +++ b/src/cpp/QtJambi/qtjambimetaobject.cpp @@ -154,13 +154,29 @@ ParameterTypeInfo ParameterTypeInfo::voidTypeInfo(JNIEnv* env){ return info; } +ParameterTypeInfo::ParameterTypeInfo( + int qTypeId, + jclass _javaClass + ) + : + m_qTypeId(qTypeId), + m_typeName(QLatin1String(QMetaType(qTypeId).name())), + m_javaClass(_javaClass), + m_internalToExternalConverter(), + m_externalToInternalConverter(), + m_resolvedI2E(false), + m_resolvedE2I(false) +{ +} + ParameterTypeInfo::ParameterTypeInfo( int qTypeId, + const QString& typeName, jclass _javaClass ) : m_qTypeId(qTypeId), - m_typeName(QLatin1String(QMetaType(qTypeId).name())), + m_typeName(typeName), m_javaClass(_javaClass), m_internalToExternalConverter(), m_externalToInternalConverter(), @@ -605,7 +621,7 @@ void analyze_methods(JNIEnv *env, jobject classLoader, int count, jobject method for(int i=0; iFromReflectedMethod(methodObject); @@ -631,12 +647,22 @@ void analyze_methods(JNIEnv *env, jobject classLoader, int count, jobject method for(int j=0; jGetObjectArrayElement(parameterClassTypes, j-1)); JavaException::check(env QTJAMBI_STACKTRACEINFO ); + QString typeName; QMetaType qMetaType( [&]() -> int { if(Java::Runtime::Void::isPrimitiveType(env, javaClass)){ + typeName = QStringLiteral("void"); return QMetaType::Void; }else if(listOfMetaTypes){ - return j(env, jtypeName); + return Java::QtJambi::MetaObjectData$MetaTypeInfo::metaTypeId(env, mt); + } + return QMetaType::UnknownType; }else if(Java::Runtime::Boolean::isPrimitiveType(env, javaClass)){ + typeName = QStringLiteral("bool"); return QMetaType::Bool; // in case of property resolver }else{ return QMetaType::UnknownType; // in case of property bindable @@ -667,17 +693,18 @@ void analyze_methods(JNIEnv *env, jobject classLoader, int count, jobject method } InternalToExternalConverter internalToExternalConverter = QtJambiTypeManager::tryGetInternalToExternalConverter( env, - qMetaType.name(), + typeName, qMetaType, javaClass, true); ExternalToInternalConverter externalToInternalConverter = QtJambiTypeManager::tryGetExternalToInternalConverter( env, javaClass, - qMetaType.name(), + typeName, qMetaType); info.parameterTypeInfos << ParameterTypeInfo{ qMetaType.id(), + typeName, getGlobalClassRef(env, javaClass), std::move(internalToExternalConverter), std::move(externalToInternalConverter)}; @@ -904,11 +931,15 @@ void QtJambiMetaObjectPrivate::initialize(JNIEnv *env, const QMetaObject *origin for(int i=0; i(env, jtypeName) : QLatin1String(qMetaType.name()); ParameterTypeInfo propertyTypeInfo{qMetaType.id(), - getGlobalClassRef(env, javaClass)}; + typeName, + getGlobalClassRef(env, javaClass)}; m_property_QProperty_fields[i].propertyField = env->FromReflectedField(fieldObject); m_property_QProperty_fields[i].valueMethod.parameterTypeInfos << propertyTypeInfo; jclass propertyClassType = Java::Runtime::Field::getType(env, fieldObject); @@ -1018,7 +1049,11 @@ void QtJambiMetaObjectPrivate::initialize(JNIEnv *env, const QMetaObject *origin for(int i=0; i(env, jtypeName) : QLatin1String(qMetaType.name()); jclass javaClass = jclass(Java::Runtime::List::get(env, propertyClassTypes, i)); jclass fieldType = Java::Runtime::Field::getType(env, fieldObject); m_propertyMembers[i].member = env->FromReflectedField(fieldObject); @@ -1045,7 +1080,8 @@ void QtJambiMetaObjectPrivate::initialize(JNIEnv *env, const QMetaObject *origin m_propertyMembers[i].type = jValueType::c; }else{ m_propertyMembers[i].type = jValueType::l; - m_propertyMembers[i].memberTypeInfo = ParameterTypeInfo{metaTypes.pointer()[0], + m_propertyMembers[i].memberTypeInfo = ParameterTypeInfo{qMetaType.id(), + typeName, getGlobalClassRef(env, javaClass)}; } } @@ -1165,7 +1201,7 @@ void QtJambiMetaObjectPrivate::invokeMethod(JNIEnv *env, jobject object, const J } }else{ if(env->IsSameObject(object, nullptr)){ - qWarning("QtJambiMetaObject::invokeMethod: Object is null"); + qCWarning(DebugAPI::internalCategory, "QtJambiMetaObject::invokeMethod: Object is null"); return; } jmethodID methodId = methodInfo.methodId; @@ -1186,7 +1222,7 @@ void QtJambiMetaObjectPrivate::invokeMethod(JNIEnv *env, jobject object, const J } #endif if(!found || !methodId){ - qWarning("QtJambiMetaObject::invokeMethod: Object type mismatch (%s), expected: %s", + qCWarning(DebugAPI::internalCategory, "QtJambiMetaObject::invokeMethod: Object type mismatch (%s), expected: %s", qPrintable(QtJambiAPI::getObjectClassName(env, object).replace('$', '.')), qPrintable(QtJambiAPI::getClassName(env, methodInfo.declaringClass).replace('$', '.'))); return; @@ -1262,7 +1298,7 @@ void QtJambiMetaObjectPrivate::invokeConstructor(JNIEnv *env, const JMethodInfo& pointer = object; } } else { - qWarning("QtJambiMetaObject::invokeConstructor: Failed to convert arguments"); + qCWarning(DebugAPI::internalCategory, "QtJambiMetaObject::invokeConstructor: Failed to convert arguments"); } }catch(const JavaException& exn){ __exceptionHandler.handle(env, exn, nullptr); @@ -2118,11 +2154,11 @@ int QtJambiMetaObject::invokeSignalOrSlot(JNIEnv *env, jobject object, int _id, QMetaObject::activate(qtjambi_cast(env, object), this, _id, _a); }else{ if(env->IsSameObject(object, nullptr)){ - qWarning("QtJambiMetaObject::invokeMethod: Object is null"); + qCWarning(DebugAPI::internalCategory, "QtJambiMetaObject::invokeMethod: Object is null"); return -1; } if(!env->IsInstanceOf(object, d->m_clazz)){ - qWarning("QtJambiMetaObject::invokeMethod: Object type mismatch (%s), expected: %s", + qCWarning(DebugAPI::internalCategory, "QtJambiMetaObject::invokeMethod: Object type mismatch (%s), expected: %s", qPrintable(QtJambiAPI::getObjectClassName(env, object).replace('$', '.')), qPrintable(QtJambiAPI::getClassName(env, d->m_clazz).replace('$', '.'))); return -1; @@ -2166,11 +2202,11 @@ int QtJambiMetaObject::readProperty(JNIEnv *env, jobject object, int _id, void * #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) }else if (d->m_property_QProperty_fields[_id].propertyField && d->m_property_QProperty_fields[_id].valueMethod.methodId){ if(env->IsSameObject(object, nullptr)){ - qWarning("QtJambiMetaObject::readProperty: Object is null"); + qCWarning(DebugAPI::internalCategory, "QtJambiMetaObject::readProperty: Object is null"); return -1; } if(!env->IsInstanceOf(object, d->m_clazz)){ - qWarning("QtJambiMetaObject::readProperty: Object type mismatch (%s), expected: %s", + qCWarning(DebugAPI::internalCategory, "QtJambiMetaObject::readProperty: Object type mismatch (%s), expected: %s", qPrintable(QtJambiAPI::getObjectClassName(env, object).replace('$', '.')), qPrintable(QtJambiAPI::getClassName(env, d->m_clazz).replace('$', '.'))); return -1; @@ -2243,7 +2279,7 @@ int QtJambiMetaObject::readProperty(JNIEnv *env, jobject object, int _id, void * } #endif if(!found || !fieldId){ - qWarning("QtJambiMetaObject::readProperty: Object type mismatch (%s), expected: %s", + qCWarning(DebugAPI::internalCategory, "QtJambiMetaObject::readProperty: Object type mismatch (%s), expected: %s", qPrintable(QtJambiAPI::getObjectClassName(env, object).replace('$', '.')), qPrintable(QtJambiAPI::getClassName(env, d->m_clazz).replace('$', '.'))); return _id - d->m_property_count; @@ -2319,11 +2355,11 @@ int QtJambiMetaObject::writeProperty(JNIEnv *env, jobject object, int _id, void #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) }else if (d->m_property_QProperty_fields[_id].propertyField && d->m_property_QProperty_fields[_id].setValueMethod.methodId){ if(env->IsSameObject(object, nullptr)){ - qWarning("QtJambiMetaObject::writeProperty: Object is null"); + qCWarning(DebugAPI::internalCategory, "QtJambiMetaObject::writeProperty: Object is null"); return -1; } if(!env->IsInstanceOf(object, d->m_clazz)){ - qWarning("QtJambiMetaObject::writeProperty: Object type mismatch (%s), expected: %s", + qCWarning(DebugAPI::internalCategory, "QtJambiMetaObject::writeProperty: Object type mismatch (%s), expected: %s", qPrintable(QtJambiAPI::getObjectClassName(env, object).replace('$', '.')), qPrintable(QtJambiAPI::getClassName(env, d->m_clazz).replace('$', '.'))); return -1; @@ -2398,7 +2434,7 @@ int QtJambiMetaObject::writeProperty(JNIEnv *env, jobject object, int _id, void } #endif if(!found || !fieldId){ - qWarning("QtJambiMetaObject::writeProperty: Object type mismatch (%s), expected: %s", + qCWarning(DebugAPI::internalCategory, "QtJambiMetaObject::writeProperty: Object type mismatch (%s), expected: %s", qPrintable(QtJambiAPI::getObjectClassName(env, object).replace('$', '.')), qPrintable(QtJambiAPI::getClassName(env, d->m_clazz).replace('$', '.'))); return _id - d->m_property_count; @@ -2490,11 +2526,11 @@ int QtJambiMetaObject::notifyProperty(JNIEnv *env, jobject object, int _id, void const JSignalInfo& signal = d->m_signals[d->m_property_notifies[_id]]; if(signal.signalField && signal.emitMethodInfo.methodId){ if(env->IsSameObject(object, nullptr)){ - qWarning("QtJambiMetaObject::notifyProperty: Object is null"); + qCWarning(DebugAPI::internalCategory, "QtJambiMetaObject::notifyProperty: Object is null"); return -1; } if(!env->IsInstanceOf(object, d->m_clazz)){ - qWarning("QtJambiMetaObject::notifyProperty: Object type mismatch (%s), expected: %s", + qCWarning(DebugAPI::internalCategory, "QtJambiMetaObject::notifyProperty: Object type mismatch (%s), expected: %s", qPrintable(QtJambiAPI::getObjectClassName(env, object).replace('$', '.')), qPrintable(QtJambiAPI::getClassName(env, d->m_clazz).replace('$', '.'))); return -1; @@ -2604,11 +2640,11 @@ int QtJambiMetaObject::bindableProperty(JNIEnv *env, jobject object, int _id, vo d->invokeMethod(env, object, d->m_property_bindables[_id], _a); }else if (d->m_property_QProperty_fields[_id].propertyField){ if(env->IsSameObject(object, nullptr)){ - qWarning("QtJambiMetaObject::bindableProperty: Object is null"); + qCWarning(DebugAPI::internalCategory, "QtJambiMetaObject::bindableProperty: Object is null"); return -1; } if(!env->IsInstanceOf(object, d->m_clazz)){ - qWarning("QtJambiMetaObject::bindableProperty: Object type mismatch (%s), expected: %s", + qCWarning(DebugAPI::internalCategory, "QtJambiMetaObject::bindableProperty: Object type mismatch (%s), expected: %s", qPrintable(QtJambiAPI::getObjectClassName(env, object).replace('$', '.')), qPrintable(QtJambiAPI::getClassName(env, d->m_clazz).replace('$', '.'))); return -1; diff --git a/src/cpp/QtJambi/qtjambimetaobject_p.h b/src/cpp/QtJambi/qtjambimetaobject_p.h index a5bda84d..8d313b94 100644 --- a/src/cpp/QtJambi/qtjambimetaobject_p.h +++ b/src/cpp/QtJambi/qtjambimetaobject_p.h @@ -48,6 +48,11 @@ class ParameterTypeInfo{ int metaTypeId, jclass _javaClass ); + ParameterTypeInfo( + int metaTypeId, + const QString& typeName, + jclass _javaClass + ); ParameterTypeInfo( int metaTypeId, jclass _javaClass, diff --git a/src/cpp/QtJambi/qtjambishell.cpp b/src/cpp/QtJambi/qtjambishell.cpp index 339d906e..6ba52a63 100644 --- a/src/cpp/QtJambi/qtjambishell.cpp +++ b/src/cpp/QtJambi/qtjambishell.cpp @@ -40,6 +40,7 @@ QT_WARNING_DISABLE_DEPRECATED #include "containeraccess_p.h" #include "supertypeinfo_p.h" #include "qtjambimetaobject_p.h" +#include "utils_p.h" class VTable { @@ -235,9 +236,9 @@ int QtJambiShell::qt_metacall(QMetaObject::Call _c, int _id, void **_a) void QtJambiShell::warnForMethod(const char* method) const { if(QSharedPointer lnk = static_cast(this)->m_link){ - qWarning("%s: The java object has been deleted prior to the native object [%s].", method, qPrintable(lnk->describe())); + qCWarning(DebugAPI::debugAPIJavaOverloadsCategory, "%s: The java object has been deleted prior to the native object [%s].", method, qPrintable(lnk->describe())); }else{ - qWarning("%s: The java object has been deleted prior to the native object [object link deleted].", method); + qCWarning(DebugAPI::debugAPIJavaOverloadsCategory, "%s: The java object has been deleted prior to the native object [object link deleted].", method); } } @@ -245,15 +246,15 @@ void QtJambiShell::warnForMethod(const char* method, const QObject* object) cons { if(object){ if(QSharedPointer lnk = static_cast(this)->m_link){ - qWarning("%s: The java object has been deleted prior to the native object [class=\"%s\", objectName=\"%s\", %s].", method, qPrintable(object->metaObject()->className()), qPrintable(object->objectName()), qPrintable(lnk->describe())); + qCWarning(DebugAPI::debugAPIJavaOverloadsCategory, "%s: The java object has been deleted prior to the native object [class=\"%s\", objectName=\"%s\", %s].", method, qPrintable(object->metaObject()->className()), qPrintable(object->objectName()), qPrintable(lnk->describe())); }else{ - qWarning("%s: The java object has been deleted prior to the native object [class=\"%s\", objectName=\"%s\", object link deleted].", method, qPrintable(object->metaObject()->className()), qPrintable(object->objectName())); + qCWarning(DebugAPI::debugAPIJavaOverloadsCategory, "%s: The java object has been deleted prior to the native object [class=\"%s\", objectName=\"%s\", object link deleted].", method, qPrintable(object->metaObject()->className()), qPrintable(object->objectName())); } }else{ if(QSharedPointer lnk = static_cast(this)->m_link){ - qWarning("%s: The java object has been deleted prior to the native object [%s].", method, qPrintable(lnk->describe())); + qCWarning(DebugAPI::debugAPIJavaOverloadsCategory, "%s: The java object has been deleted prior to the native object [%s].", method, qPrintable(lnk->describe())); }else{ - qWarning("%s: The java object has been deleted prior to the native object [object link deleted].", method); + qCWarning(DebugAPI::debugAPIJavaOverloadsCategory, "%s: The java object has been deleted prior to the native object [object link deleted].", method); } } } @@ -281,7 +282,7 @@ jmethodID QtJambiShell::javaMethod(const std::type_info& typeId, int pos) const bool QtJambiShell::tryDeleteShell(const std::type_info& typeId){ if(enabledDanglingPointerCheck()){ if(!checkedGetTypeInfo(QtJambiPrivate::CheckPointer::supplyType, this)){ - qWarning("Possible memory leak while deleting %s: Cannot delete shell at %p", qPrintable(QtJambiAPI::typeName(typeId)), this); + qCWarning(DebugAPI::internalCategory, "Possible memory leak while deleting %s: Cannot delete shell at %p", qPrintable(QtJambiAPI::typeName(typeId)), this); return false; } } diff --git a/src/cpp/QtJambi/registry.cpp b/src/cpp/QtJambi/registry.cpp index dd35d160..2ed45bd2 100644 --- a/src/cpp/QtJambi/registry.cpp +++ b/src/cpp/QtJambi/registry.cpp @@ -212,7 +212,7 @@ static void cacheMisses(const char *s) { static int count = 0; - qDebug("Total # of cache misses: %d : '%s'", ++count, s); + qCDebug(DebugAPI::internalCategory, "Total # of cache misses: %d : '%s'", ++count, s); } #endif @@ -2230,7 +2230,7 @@ jclass findClass(JNIEnv *env, const char *qualifiedName, jobject classLoader = n if (env->ExceptionCheck()) { // It is not allowed to call env->FindClass() with an exception pending, this is illegal JNI // usage and must be the result of a software design error. - qWarning("findClass(\"%s\") with Exception pending", qualifiedName); + qCWarning(DebugAPI::internalCategory, "findClass(\"%s\") with Exception pending", qualifiedName); JavaException::check(env QTJAMBI_STACKTRACEINFO ); Q_ASSERT(false); return nullptr; diff --git a/src/cpp/QtJambi/scope.cpp b/src/cpp/QtJambi/scope.cpp index 2c096a71..e73fb142 100644 --- a/src/cpp/QtJambi/scope.cpp +++ b/src/cpp/QtJambi/scope.cpp @@ -48,9 +48,9 @@ DoFinally::~DoFinally(){ }catch(const JavaException& exn){ if(DefaultJniEnvironment env{200}){ __exnHandler.handle(env, exn, nullptr); - }else qWarning("%s", exn.what()); + }else qCWarning(DebugAPI::internalCategory, "%s", exn.what()); } catch (const std::exception& e) { - qWarning("%s", e.what()); + qCWarning(DebugAPI::internalCategory, "%s", e.what()); } catch (...) { } } @@ -140,9 +140,9 @@ QtJambiScope::~QtJambiScope(){ if(DefaultJniEnvironment env{200}){ exn.report(env); } - else qWarning("%s", exn.what()); + else qCWarning(DebugAPI::internalCategory, "%s", exn.what()); } catch (const std::exception& e) { - qWarning("%s", e.what()); + qCWarning(DebugAPI::internalCategory, "%s", e.what()); } catch (...) { } } diff --git a/src/cpp/QtJambi/setup.cpp b/src/cpp/QtJambi/setup.cpp index b8322176..ae11a453 100644 --- a/src/cpp/QtJambi/setup.cpp +++ b/src/cpp/QtJambi/setup.cpp @@ -726,7 +726,7 @@ extern "C" Q_DECL_EXPORT jint JNICALL QTJAMBI_FUNCTION_PREFIX(JNI_OnLoad)(JavaVM #endif , "plugins_platforms_qtforandroid")); if(!library.load()){ - qWarning("Unable to load qtforandroid: %s", qPrintable(library.errorString())); + qCWarning(DebugAPI::internalCategory, "Unable to load qtforandroid: %s", qPrintable(library.errorString())); } qputenv("QML_IMPORT_PATH", qPrintable(thisLibraryPath.absolutePath())); qputenv("QML2_IMPORT_PATH", qPrintable(thisLibraryPath.absolutePath())); @@ -817,12 +817,12 @@ extern "C" Q_DECL_EXPORT jint JNICALL QTJAMBI_FUNCTION_PREFIX(JNI_OnLoad)(JavaVM JniLocalFrame __jniLocalFrame(env, 16); e.raiseInJava(env); }else{ - qWarning("%s", e.what()); + qCWarning(DebugAPI::internalCategory, "%s", e.what()); } }catch (const std::exception& exn) { - qWarning("An error occurred: %s", exn.what()); + qCWarning(DebugAPI::internalCategory, "An error occurred: %s", exn.what()); }catch (...) { - qWarning("An error occurred."); + qCWarning(DebugAPI::internalCategory, "An error occurred."); } } return JNI_VERSION_1_8; @@ -960,10 +960,10 @@ int main(int argc, char *argv[]) Java::Runtime::Throwable::printStackTrace(env, exn.object()); return -1; }catch (const std::exception& exn) { - qWarning("An error occurred: %s", exn.what()); + qCWarning(DebugAPI::internalCategory, "An error occurred: %s", exn.what()); return -1; }catch (...) { - qWarning("An error occurred."); + qCWarning(DebugAPI::internalCategory, "An error occurred."); return -1; } int reduceArgs = 1; @@ -1012,19 +1012,19 @@ int main(int argc, char *argv[]) Java::Runtime::Throwable::printStackTrace(env, exn.object()); return -1; }catch (const std::exception& exn) { - qWarning("An error occurred: %s", exn.what()); + qCWarning(DebugAPI::internalCategory, "An error occurred: %s", exn.what()); return -1; }catch (...) { - qWarning("An error occurred."); + qCWarning(DebugAPI::internalCategory, "An error occurred."); return -1; } qputenv("QT_ANDROID_NO_EXIT_CALL", "1"); return 0; }else{ - qWarning("no main class specified"); + qCWarning(DebugAPI::internalCategory, "no main class specified"); } }else{ - qWarning("Unable to load JVM."); + qCWarning(DebugAPI::internalCategory, "Unable to load JVM."); } return -1; } diff --git a/src/cpp/QtJambi/thread.cpp b/src/cpp/QtJambi/thread.cpp index b84cb393..b24864dc 100644 --- a/src/cpp/QtJambi/thread.cpp +++ b/src/cpp/QtJambi/thread.cpp @@ -374,7 +374,7 @@ EventDispatcherCheck::~EventDispatcherCheck(){ } } } catch (const std::exception& e) { - qWarning("%s", e.what()); + qCWarning(DebugAPI::internalCategory, "%s", e.what()); } catch (...) { } } diff --git a/src/cpp/QtJambi/typemanager.cpp b/src/cpp/QtJambi/typemanager.cpp index c830781b..b52f628e 100644 --- a/src/cpp/QtJambi/typemanager.cpp +++ b/src/cpp/QtJambi/typemanager.cpp @@ -2545,7 +2545,7 @@ InternalToExternalConverter QtJambiTypeManager::getInternalToExternalConverterIm if(!found){ p->l = QtJambiAPI::convertNativeToJavaObjectAsWrapper(env, *ptr, *typeId); if(scope) - scope->addObjectInvalidation(env, p->l, false, true); + scope->addObjectInvalidation(env, p->l, true, true); } } return true; @@ -2649,7 +2649,7 @@ InternalToExternalConverter QtJambiTypeManager::getInternalToExternalConverterIm p->l = QtJambiAPI::convertNativeToJavaObjectAsWrapper(env, in, *typeId); found = true; if(scope) - scope->addObjectInvalidation(env, p->l, false, true); + scope->addObjectInvalidation(env, p->l, true, true); }else{ QByteArray className = getJavaName(*typeId); jclass targetType = nullptr; @@ -2665,7 +2665,7 @@ InternalToExternalConverter QtJambiTypeManager::getInternalToExternalConverterIm if(!found){ p->l = QtJambiAPI::convertNativeToJavaObjectAsWrapper(env, *ptr, *typeId); if(scope) - scope->addObjectInvalidation(env, p->l, false, true); + scope->addObjectInvalidation(env, p->l, true, true); } } return true; @@ -2684,7 +2684,7 @@ InternalToExternalConverter QtJambiTypeManager::getInternalToExternalConverterIm p->l = QtJambiAPI::convertNativeToJavaObjectAsWrapper(env, in, *typeId); found = true; if(scope) - scope->addObjectInvalidation(env, p->l, false, true); + scope->addObjectInvalidation(env, p->l, true, true); }else{ QByteArray className = getJavaName(*typeId); jclass targetType = nullptr; @@ -2700,7 +2700,7 @@ InternalToExternalConverter QtJambiTypeManager::getInternalToExternalConverterIm if(!found){ p->l = QtJambiAPI::convertNativeToJavaObjectAsWrapper(env, in, *typeId); if(scope) - scope->addObjectInvalidation(env, p->l, false, true); + scope->addObjectInvalidation(env, p->l, true, true); } } return true; @@ -2718,6 +2718,7 @@ InternalToExternalConverter QtJambiTypeManager::getInternalToExternalConverterIm } }else{ QByteArray className = QtJambiAPI::getClassName(_env, externalClass).replace(".", "/").toLatin1(); + externalClass = getGlobalClassRef(_env, externalClass, className); if (Java::QtCore::QObject::isAssignableFrom(_env,externalClass)) { if(pointerType == PointerType::SharedPointer){ return [className](JNIEnv* env, QtJambiScope*, const void* in, jvalue* p, bool)->bool{ @@ -2764,31 +2765,31 @@ InternalToExternalConverter QtJambiTypeManager::getInternalToExternalConverterIm return true; }; }else if(pointerType == PointerType::ScopedPointer){ - return [className](JNIEnv* env, QtJambiScope* scope, const void* in, jvalue* p, bool)->bool{ + return [externalClass](JNIEnv* env, QtJambiScope* scope, const void* in, jvalue* p, bool)->bool{ const QScopedPointer* ptr = reinterpret_cast*>(in); if(ptr){ - p->l = QtJambiAPI::convertQObjectToJavaObject(env, ptr->data(), className); + p->l = QtJambiAPI::convertQObjectToJavaObject(env, ptr->data(), externalClass); if(scope) scope->addObjectInvalidation(env, p->l, false, true); } return true; }; }else if(pointerType == PointerType::unique_ptr){ - return [className](JNIEnv* env, QtJambiScope* scope, const void* in, jvalue* p, bool)->bool{ + return [externalClass](JNIEnv* env, QtJambiScope* scope, const void* in, jvalue* p, bool)->bool{ const std::unique_ptr* ptr = reinterpret_cast*>(in); if(ptr){ - p->l = QtJambiAPI::convertQObjectToJavaObject(env, ptr->get(), className); + p->l = QtJambiAPI::convertQObjectToJavaObject(env, ptr->get(), externalClass); if(scope) scope->addObjectInvalidation(env, p->l, false, true); } return true; }; }else{ - return [className](JNIEnv* env, QtJambiScope*, const void* in, jvalue* p, bool)->bool{ + return [externalClass](JNIEnv* env, QtJambiScope*, const void* in, jvalue* p, bool)->bool{ QObject * const *ptr = reinterpret_cast(in); if(ptr){ QObject * qobject = *ptr; - p->l = QtJambiAPI::convertQObjectToJavaObject(env, qobject, className); + p->l = QtJambiAPI::convertQObjectToJavaObject(env, qobject, externalClass); } return true; }; @@ -2840,20 +2841,20 @@ InternalToExternalConverter QtJambiTypeManager::getInternalToExternalConverterIm return true; }; }else if(pointerType == PointerType::ScopedPointer){ - return [className](JNIEnv* env, QtJambiScope* scope, const void* in, jvalue* p, bool)->bool{ + return [externalClass](JNIEnv* env, QtJambiScope* scope, const void* in, jvalue* p, bool)->bool{ const QScopedPointer* ptr = reinterpret_cast*>(in); if(ptr){ - p->l = QtJambiAPI::convertNativeToJavaObjectAsWrapper(env, ptr->data(), className.constData()); + p->l = QtJambiAPI::convertNativeToJavaObjectAsWrapper(env, ptr->data(), externalClass); if(scope) scope->addObjectInvalidation(env, p->l, false, true); } return true; }; }else if(pointerType == PointerType::unique_ptr){ - return [className](JNIEnv* env, QtJambiScope* scope, const void* in, jvalue* p, bool)->bool{ + return [externalClass](JNIEnv* env, QtJambiScope* scope, const void* in, jvalue* p, bool)->bool{ const std::unique_ptr* ptr = reinterpret_cast*>(in); if(ptr){ - p->l = QtJambiAPI::convertNativeToJavaObjectAsWrapper(env, ptr->get(), className.constData()); + p->l = QtJambiAPI::convertNativeToJavaObjectAsWrapper(env, ptr->get(), externalClass); if(scope) scope->addObjectInvalidation(env, p->l, false, true); } @@ -2874,7 +2875,7 @@ InternalToExternalConverter QtJambiTypeManager::getInternalToExternalConverterIm } } if (internalTypeName.contains(QLatin1Char('*')) || forcePointerConversion){ - return [className](JNIEnv* env, QtJambiScope* scope, const void* in, jvalue* p, bool)->bool{ + return [externalClass](JNIEnv* env, QtJambiScope* scope, const void* in, jvalue* p, bool)->bool{ void * const *ptr = reinterpret_cast(in); if(ptr){ // If we found a link for the object, we use the java object @@ -2884,23 +2885,48 @@ InternalToExternalConverter QtJambiTypeManager::getInternalToExternalConverterIm jobject obj = link->getJavaObjectLocalRef(env); if(!obj && link->ownership()==QtJambiLink::Ownership::Split){ link->invalidate(env); - p->l = QtJambiAPI::convertNativeToJavaObjectAsWrapper(env, *ptr, className); + p->l = QtJambiAPI::convertNativeToJavaObjectAsWrapper(env, *ptr, externalClass); + found = true; + if(scope) + scope->addObjectInvalidation(env, p->l, true, true); + }else{ + if(env->IsInstanceOf(obj, externalClass)){ + p->l = obj; + found = true; + } + } + } + if(!found){ + p->l = QtJambiAPI::convertNativeToJavaObjectAsWrapper(env, *ptr, externalClass); + if(scope) + scope->addObjectInvalidation(env, p->l, true, true); + } + } + return true; + }; + }else if(internalTypeName.endsWith(QLatin1Char('&'))){ + return [externalClass](JNIEnv* env, QtJambiScope* scope, const void* in, jvalue* p, bool)->bool{ + if(in){ + // If we found a link for the object, we use the java object + // from the link. + bool found = false; + for(const QSharedPointer& link : QtJambiLink::findLinksForPointer(in)) { + jobject obj = link->getJavaObjectLocalRef(env); + if(!obj && link->ownership()==QtJambiLink::Ownership::Split){ + link->invalidate(env); + p->l = QtJambiAPI::convertNativeToJavaObjectAsWrapper(env, in, externalClass); found = true; if(scope) scope->addObjectInvalidation(env, p->l, true, true); }else{ - jclass targetType = nullptr; - try{ - targetType = JavaAPI::resolveClass(env, className); - }catch(...){} - if(targetType && env->IsInstanceOf(obj, targetType)){ + if(env->IsInstanceOf(obj, externalClass)){ p->l = obj; found = true; } } } if(!found){ - p->l = QtJambiAPI::convertNativeToJavaObjectAsWrapper(env, *ptr, className); + p->l = QtJambiAPI::convertNativeToJavaObjectAsWrapper(env, in, externalClass); if(scope) scope->addObjectInvalidation(env, p->l, true, true); } @@ -2908,9 +2934,9 @@ InternalToExternalConverter QtJambiTypeManager::getInternalToExternalConverterIm return true; }; }else{ - return [className](JNIEnv* env, QtJambiScope*, const void* in, jvalue* p, bool)->bool{ + return [externalClass](JNIEnv* env, QtJambiScope*, const void* in, jvalue* p, bool)->bool{ if(in){ - p->l = QtJambiAPI::convertNativeToJavaObjectAsCopy(env, in, qPrintable(className)); + p->l = QtJambiAPI::convertNativeToJavaObjectAsCopy(env, in, externalClass); } return true; }; @@ -2951,7 +2977,7 @@ InternalToExternalConverter QtJambiTypeManager::getInternalToExternalConverterIm return [interfaceTypeId](JNIEnv* env, QtJambiScope* scope, const void* in, jvalue* p, bool)->bool{ p->l = QtJambiAPI::convertNativeToJavaObjectAsCopy(env, in, *interfaceTypeId); if(scope) - scope->addObjectInvalidation(env, p->l, false, true); + scope->addObjectInvalidation(env, p->l, true, true); return true; }; }else if(const std::type_info* interfaceTypeId = getTypeByMetaType(internalMetaType)){ diff --git a/src/cpp/QtJambi/utils_p.h b/src/cpp/QtJambi/utils_p.h index b495df0c..763af652 100644 --- a/src/cpp/QtJambi/utils_p.h +++ b/src/cpp/QtJambi/utils_p.h @@ -31,6 +31,7 @@ #define QTJAMBI_UTILS_P_H #include +#include #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) namespace QtPrivate{ @@ -89,4 +90,9 @@ jobject internal_convertSmartPointerToJavaObject(JNIEnv *env, const char *classN jobject internal_convertSmartPointerToJavaInterface(JNIEnv *env, const std::type_info& interfaceType, void* ptr_shared_pointer, SmartPointerDeleter sharedPointerDeleter, SmartPointerGetterFunction sharedPointerGetter); +namespace DebugAPI{ +Q_DECLARE_LOGGING_CATEGORY(internalCategory) +Q_DECLARE_LOGGING_CATEGORY(debugAPIJavaOverloadsCategory) +} + #endif // QTJAMBI_UTILS_P_H diff --git a/src/cpp/QtJambi/variant.cpp b/src/cpp/QtJambi/variant.cpp index ddb41a73..99ad0135 100644 --- a/src/cpp/QtJambi/variant.cpp +++ b/src/cpp/QtJambi/variant.cpp @@ -62,7 +62,7 @@ void defaultConstruct(QVariant::Private *d, const void *copy) const QMetaType type(d->type); const uint size = uint(type.sizeOf()); if (!size) { - qWarning("Trying to construct an instance of an invalid type, type id: %i", d->type); + qCWarning(DebugAPI::internalCategory, "Trying to construct an instance of an invalid type, type id: %i", d->type); d->type = QVariant::Invalid; return; } diff --git a/src/cpp/QtJambiCore/QLinkedList_shell.cpp b/src/cpp/QtJambiCore/QLinkedList_shell.cpp index 033b9ae7..934029b4 100644 --- a/src/cpp/QtJambiCore/QLinkedList_shell.cpp +++ b/src/cpp/QtJambiCore/QLinkedList_shell.cpp @@ -99,7 +99,13 @@ extern "C" Q_DECL_EXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core QPair container = ContainerAPI::fromNativeId(__this_nativeId); QtJambiAPI::checkNullPointer(__jni_env, container.first, typeid(QLinkedList)); QTJAMBI_NATIVE_INSTANCE_METHOD_CALL("QLinkedList::first() const", container.first) - result = dynamic_cast(container.second)->first(__jni_env, container.first); + AbstractLinkedListAccess* containerAccess = dynamic_cast(container.second); + Q_ASSERT(containerAccess); + jint size = containerAccess->size(__jni_env, container.first); + if (size == 0) { + Java::Runtime::IndexOutOfBoundsException::throwNew(__jni_env, QString("Accessing container of size 0 at 0") QTJAMBI_STACKTRACEINFO ); + } + result = containerAccess->first(__jni_env, container.first); }QTJAMBI_CATCH(const JavaException& exn){ exn.raiseInJava(__jni_env); }QTJAMBI_TRY_END @@ -117,7 +123,13 @@ extern "C" Q_DECL_EXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core QPair container = ContainerAPI::fromNativeId(__this_nativeId); QtJambiAPI::checkNullPointer(__jni_env, container.first, typeid(QLinkedList)); QTJAMBI_NATIVE_INSTANCE_METHOD_CALL("QLinkedList::last() const", container.first) - result = dynamic_cast(container.second)->last(__jni_env, container.first); + AbstractLinkedListAccess* containerAccess = dynamic_cast(container.second); + Q_ASSERT(containerAccess); + jint size = containerAccess->size(__jni_env, container.first); + if (size == 0) { + Java::Runtime::IndexOutOfBoundsException::throwNew(__jni_env, QString("Accessing container of size 0 at 0") QTJAMBI_STACKTRACEINFO ); + } + result = containerAccess->last(__jni_env, container.first); }QTJAMBI_CATCH(const JavaException& exn){ exn.raiseInJava(__jni_env); }QTJAMBI_TRY_END diff --git a/src/cpp/QtJambiCore/QList_shell.cpp b/src/cpp/QtJambiCore/QList_shell.cpp index 0fad812c..e0613d46 100644 --- a/src/cpp/QtJambiCore/QList_shell.cpp +++ b/src/cpp/QtJambiCore/QList_shell.cpp @@ -106,6 +106,10 @@ extern "C" Q_DECL_EXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core QTJAMBI_NATIVE_INSTANCE_METHOD_CALL("QList::at(int i) const", container.first) AbstractListAccess* containerAccess = dynamic_cast(container.second); Q_ASSERT(containerAccess); + jint size = containerAccess->size(__jni_env, container.first); + if (i0 >= size || i0 < 0) { + Java::Runtime::IndexOutOfBoundsException::throwNew(__jni_env, QString("Accessing container of size %1 at %2").arg(size, i0) QTJAMBI_STACKTRACEINFO ); + } result = containerAccess->at(__jni_env, container.first, i0); }QTJAMBI_CATCH(const JavaException& exn){ exn.raiseInJava(__jni_env); @@ -113,6 +117,30 @@ extern "C" Q_DECL_EXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core return result; } +// QList::last() const +extern "C" Q_DECL_EXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QList_last__J) + (JNIEnv *__jni_env, + jclass, + QtJambiNativeID __this_nativeId) +{ + jobject result{nullptr}; + QTJAMBI_TRY{ + QPair container = ContainerAPI::fromNativeId(__this_nativeId); + QtJambiAPI::checkNullPointer(__jni_env, container.first, typeid(QList)); + QTJAMBI_NATIVE_INSTANCE_METHOD_CALL("QList::last() const", container.first) + AbstractListAccess* containerAccess = dynamic_cast(container.second); + Q_ASSERT(containerAccess); + jint size = containerAccess->size(__jni_env, container.first); + if (size == 0) { + Java::Runtime::IndexOutOfBoundsException::throwNew(__jni_env, QString("Accessing container of size 0 at 0") QTJAMBI_STACKTRACEINFO ); + } + result = containerAccess->at(__jni_env, container.first, size-1); + }QTJAMBI_CATCH(const JavaException& exn){ + exn.raiseInJava(__jni_env); + }QTJAMBI_TRY_END + return result; +} + // QList::begin() extern "C" Q_DECL_EXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QList_begin__J) (JNIEnv *__jni_env, @@ -353,6 +381,13 @@ extern "C" Q_DECL_EXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core QTJAMBI_NATIVE_INSTANCE_METHOD_CALL("QList::mid(int pos, int length) const", container.first) AbstractListAccess* containerAccess = dynamic_cast(container.second); Q_ASSERT(containerAccess); + jint size = containerAccess->size(__jni_env, container.first); + if (pos0 >= size || pos0 < 0) { + Java::Runtime::IndexOutOfBoundsException::throwNew(__jni_env, QString("Accessing container of size %1 at %2").arg(size, pos0) QTJAMBI_STACKTRACEINFO ); + } + if (length1>=0 && pos0+length1 > size) { + Java::Runtime::IndexOutOfBoundsException::throwNew(__jni_env, QString("Accessing container of size %1 at %2 to %3").arg(size, pos0, pos0+length1) QTJAMBI_STACKTRACEINFO ); + } result = containerAccess->mid(__jni_env, container.first, pos0, length1); }QTJAMBI_CATCH(const JavaException& exn){ exn.raiseInJava(__jni_env); @@ -374,6 +409,13 @@ extern "C" Q_DECL_EXPORT void JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QL QTJAMBI_NATIVE_INSTANCE_METHOD_CALL("QList::move(int from, int to)", container.first) AbstractListAccess* containerAccess = dynamic_cast(container.second); Q_ASSERT(containerAccess); + jint size = containerAccess->size(__jni_env, container.first); + if (from0 >= size || from0 < 0) { + Java::Runtime::IndexOutOfBoundsException::throwNew(__jni_env, QString("Accessing container of size %1 at %2").arg(size, from0) QTJAMBI_STACKTRACEINFO ); + } + if (to1 >= size && to1 < 0) { + Java::Runtime::IndexOutOfBoundsException::throwNew(__jni_env, QString("Accessing container of size %1 at %2").arg(size, to1) QTJAMBI_STACKTRACEINFO ); + } containerAccess->move(__jni_env, container.first, from0, to1); }QTJAMBI_CATCH(const JavaException& exn){ exn.raiseInJava(__jni_env); @@ -436,12 +478,90 @@ extern "C" Q_DECL_EXPORT void JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QL QTJAMBI_NATIVE_INSTANCE_METHOD_CALL("QList::replace(int i, const T & t)", container.first) AbstractListAccess* containerAccess = dynamic_cast(container.second); Q_ASSERT(containerAccess); + jint size = containerAccess->size(__jni_env, container.first); + if (i0 >= size || i0 < 0) { + Java::Runtime::IndexOutOfBoundsException::throwNew(__jni_env, QString("Accessing container of size %1 at %2").arg(size, i0) QTJAMBI_STACKTRACEINFO ); + } containerAccess->replace(__jni_env, container.first, i0, t1); }QTJAMBI_CATCH(const JavaException& exn){ exn.raiseInJava(__jni_env); }QTJAMBI_TRY_END } +// QList::removeOne(const T & t) +extern "C" Q_DECL_EXPORT jboolean JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QList_removeOne__JLjava_lang_Object_2) + (JNIEnv *__jni_env, + jclass, + QtJambiNativeID __this_nativeId, + jobject t1) +{ + jboolean result = false; + QTJAMBI_TRY{ + QPair container = ContainerAPI::fromNativeId(__this_nativeId); + QtJambiAPI::checkNullPointer(__jni_env, container.first, typeid(QList)); + QTJAMBI_NATIVE_INSTANCE_METHOD_CALL("QList::replace(int i, const T & t)", container.first) + AbstractListAccess* containerAccess = dynamic_cast(container.second); + Q_ASSERT(containerAccess); + jint i0 = containerAccess->indexOf(__jni_env, container.first, t1, 0); + if ((result = i0 >= 0)) + containerAccess->remove(__jni_env, container.first, i0, 1); + }QTJAMBI_CATCH(const JavaException& exn){ + exn.raiseInJava(__jni_env); + }QTJAMBI_TRY_END + return result; +} + +// QList::takeAt(int i) +extern "C" Q_DECL_EXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QList_takeAt__JI) + (JNIEnv *__jni_env, + jclass, + QtJambiNativeID __this_nativeId, + jint i0) +{ + jobject result = nullptr; + QTJAMBI_TRY{ + QPair container = ContainerAPI::fromNativeId(__this_nativeId); + QtJambiAPI::checkNullPointer(__jni_env, container.first, typeid(QList)); + QTJAMBI_NATIVE_INSTANCE_METHOD_CALL("QList::reserve(int size)", container.first) + AbstractListAccess* containerAccess = dynamic_cast(container.second); + Q_ASSERT(containerAccess); + jint size = containerAccess->size(__jni_env, container.first); + if (i0 >= size || i0 < 0) { + Java::Runtime::IndexOutOfBoundsException::throwNew(__jni_env, QString("Accessing container of size %1 at %2").arg(size, i0) QTJAMBI_STACKTRACEINFO ); + } + result = containerAccess->at(__jni_env, container.first, i0); + containerAccess->remove(__jni_env, container.first, i0, 1); + }QTJAMBI_CATCH(const JavaException& exn){ + exn.raiseInJava(__jni_env); + }QTJAMBI_TRY_END + return result; +} + +// QList::takeLast() +extern "C" Q_DECL_EXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QList_takeLast__J) + (JNIEnv *__jni_env, + jclass, + QtJambiNativeID __this_nativeId) +{ + jobject result = nullptr; + QTJAMBI_TRY{ + QPair container = ContainerAPI::fromNativeId(__this_nativeId); + QtJambiAPI::checkNullPointer(__jni_env, container.first, typeid(QList)); + QTJAMBI_NATIVE_INSTANCE_METHOD_CALL("QList::reserve(int size)", container.first) + AbstractListAccess* containerAccess = dynamic_cast(container.second); + Q_ASSERT(containerAccess); + jint size = containerAccess->size(__jni_env, container.first); + if (size == 0) { + Java::Runtime::IndexOutOfBoundsException::throwNew(__jni_env, QString("Accessing container of size 0 at 0") QTJAMBI_STACKTRACEINFO ); + } + result = containerAccess->at(__jni_env, container.first, size-1); + containerAccess->remove(__jni_env, container.first, size-1, 1); + }QTJAMBI_CATCH(const JavaException& exn){ + exn.raiseInJava(__jni_env); + }QTJAMBI_TRY_END + return result; +} + // QList::reserve(int size) extern "C" Q_DECL_EXPORT void JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QList_reserve__JI) (JNIEnv *__jni_env, @@ -516,6 +636,13 @@ extern "C" Q_DECL_EXPORT void JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QL QTJAMBI_NATIVE_INSTANCE_METHOD_CALL("QList::swap(int i, int j)", container.first) AbstractListAccess* containerAccess = dynamic_cast(container.second); Q_ASSERT(containerAccess); + jint size = containerAccess->size(__jni_env, container.first); + if (i0 >= size || i0 < 0) { + Java::Runtime::IndexOutOfBoundsException::throwNew(__jni_env, QString("Accessing container of size %1 at %2").arg(size, i0) QTJAMBI_STACKTRACEINFO ); + } + if (j1 >= size || j1 < 0) { + Java::Runtime::IndexOutOfBoundsException::throwNew(__jni_env, QString("Accessing container of size %1 at %2").arg(size, j1) QTJAMBI_STACKTRACEINFO ); + } containerAccess->swapItemsAt(__jni_env, container.first, i0, j1); }QTJAMBI_CATCH(const JavaException& exn){ exn.raiseInJava(__jni_env); @@ -711,6 +838,10 @@ extern "C" Q_DECL_EXPORT void JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QL QTJAMBI_NATIVE_INSTANCE_METHOD_CALL("QList::remove(int i, int count)", container.first) AbstractListAccess* containerAccess = dynamic_cast(container.second); Q_ASSERT(containerAccess); + jint size = containerAccess->size(__jni_env, container.first); + if (i0+count1 > size || i0 < 0) { + Java::Runtime::IndexOutOfBoundsException::throwNew(__jni_env, QString("Accessing container of size %1 at %2").arg(size, i0 < 0 ? i0 : i0+count1) QTJAMBI_STACKTRACEINFO ); + } containerAccess->remove(__jni_env, container.first, i0, count1); }QTJAMBI_CATCH(const JavaException& exn){ exn.raiseInJava(__jni_env); @@ -732,12 +863,36 @@ extern "C" Q_DECL_EXPORT void JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QL QTJAMBI_NATIVE_INSTANCE_METHOD_CALL("QList::insert(int i, int count, const T & t)", container.first) AbstractListAccess* containerAccess = dynamic_cast(container.second); Q_ASSERT(containerAccess); + jint size = containerAccess->size(__jni_env, container.first); + if (i0 >= size || i0 < 0) { + Java::Runtime::IndexOutOfBoundsException::throwNew(__jni_env, QString("Accessing container of size %1 at %2").arg(size, i0) QTJAMBI_STACKTRACEINFO ); + } containerAccess->insert(__jni_env, container.first, i0, count1, t2); }QTJAMBI_CATCH(const JavaException& exn){ exn.raiseInJava(__jni_env); }QTJAMBI_TRY_END } +// QList::append(const T & t) +extern "C" Q_DECL_EXPORT void JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QList_append__JLjava_lang_Object_2) + (JNIEnv *__jni_env, + jclass, + QtJambiNativeID __this_nativeId, + jobject t2) +{ + QTJAMBI_TRY{ + QPair container = ContainerAPI::fromNativeId(__this_nativeId); + QtJambiAPI::checkNullPointer(__jni_env, container.first, typeid(QList)); + QTJAMBI_NATIVE_INSTANCE_METHOD_CALL("QList::append(const T & t)", container.first) + AbstractListAccess* containerAccess = dynamic_cast(container.second); + Q_ASSERT(containerAccess); + jint size = containerAccess->size(__jni_env, container.first); + containerAccess->insert(__jni_env, container.first, size, 1, t2); + }QTJAMBI_CATCH(const JavaException& exn){ + exn.raiseInJava(__jni_env); + }QTJAMBI_TRY_END +} + #if QT_VERSION >= QT_VERSION_CHECK(6,0,0) // QList::squeeze() extern "C" Q_DECL_EXPORT void JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QList_squeeze__J) diff --git a/src/cpp/QtJambiCore/QVector_shell.cpp b/src/cpp/QtJambiCore/QVector_shell.cpp index 585a64b9..7c68e2d2 100644 --- a/src/cpp/QtJambiCore/QVector_shell.cpp +++ b/src/cpp/QtJambiCore/QVector_shell.cpp @@ -84,6 +84,101 @@ extern "C" Q_DECL_EXPORT void JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QV }QTJAMBI_TRY_END } +// QVector::append(const T & t) +extern "C" Q_DECL_EXPORT void JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QVector_append__JLjava_lang_Object_2) + (JNIEnv *__jni_env, + jclass, + QtJambiNativeID __this_nativeId, + jobject t2) +{ + QTJAMBI_TRY{ + QPair container = ContainerAPI::fromNativeId(__this_nativeId); + QtJambiAPI::checkNullPointer(__jni_env, container.first, typeid(QVector)); + QTJAMBI_NATIVE_INSTANCE_METHOD_CALL("QVector::append(const T & t)", container.first) + AbstractVectorAccess* containerAccess = dynamic_cast(container.second); + Q_ASSERT(containerAccess); + jint size = containerAccess->size(__jni_env, container.first); + containerAccess->insert(__jni_env, container.first, size, 1, t2); + }QTJAMBI_CATCH(const JavaException& exn){ + exn.raiseInJava(__jni_env); + }QTJAMBI_TRY_END +} + +// QVector::takeAt(int i) +extern "C" Q_DECL_EXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QVector_takeAt__JI) + (JNIEnv *__jni_env, + jclass, + QtJambiNativeID __this_nativeId, + jint i0) +{ + jobject result = nullptr; + QTJAMBI_TRY{ + QPair container = ContainerAPI::fromNativeId(__this_nativeId); + QtJambiAPI::checkNullPointer(__jni_env, container.first, typeid(QVector)); + QTJAMBI_NATIVE_INSTANCE_METHOD_CALL("QVector::reserve(int size)", container.first) + AbstractVectorAccess* containerAccess = dynamic_cast(container.second); + Q_ASSERT(containerAccess); + jint size = containerAccess->size(__jni_env, container.first); + if (i0 >= size || i0 < 0) { + Java::Runtime::IndexOutOfBoundsException::throwNew(__jni_env, QString("Accessing container of size %1 at %2").arg(size, i0) QTJAMBI_STACKTRACEINFO ); + } + result = containerAccess->at(__jni_env, container.first, i0); + containerAccess->remove(__jni_env, container.first, i0, 1); + }QTJAMBI_CATCH(const JavaException& exn){ + exn.raiseInJava(__jni_env); + }QTJAMBI_TRY_END + return result; +} + +// QVector::takeLast() +extern "C" Q_DECL_EXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QVector_takeLast__J) + (JNIEnv *__jni_env, + jclass, + QtJambiNativeID __this_nativeId) +{ + jobject result = nullptr; + QTJAMBI_TRY{ + QPair container = ContainerAPI::fromNativeId(__this_nativeId); + QtJambiAPI::checkNullPointer(__jni_env, container.first, typeid(QVector)); + QTJAMBI_NATIVE_INSTANCE_METHOD_CALL("QVector::reserve(int size)", container.first) + AbstractVectorAccess* containerAccess = dynamic_cast(container.second); + Q_ASSERT(containerAccess); + jint size = containerAccess->size(__jni_env, container.first); + if (size == 0) { + Java::Runtime::IndexOutOfBoundsException::throwNew(__jni_env, QString("Accessing container of size 0 at 0") QTJAMBI_STACKTRACEINFO ); + } + result = containerAccess->at(__jni_env, container.first, size-1); + containerAccess->remove(__jni_env, container.first, size-1, 1); + }QTJAMBI_CATCH(const JavaException& exn){ + exn.raiseInJava(__jni_env); + }QTJAMBI_TRY_END + return result; +} + +// QVector::last() const +extern "C" Q_DECL_EXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QVector_last__J) + (JNIEnv *__jni_env, + jclass, + QtJambiNativeID __this_nativeId) +{ + jobject result{nullptr}; + QTJAMBI_TRY{ + QPair container = ContainerAPI::fromNativeId(__this_nativeId); + QtJambiAPI::checkNullPointer(__jni_env, container.first, typeid(QVector)); + QTJAMBI_NATIVE_INSTANCE_METHOD_CALL("QVector::last() const", container.first) + AbstractVectorAccess* containerAccess = dynamic_cast(container.second); + Q_ASSERT(containerAccess); + jint size = containerAccess->size(__jni_env, container.first); + if (size == 0) { + Java::Runtime::IndexOutOfBoundsException::throwNew(__jni_env, QString("Accessing container of size 0 at 0") QTJAMBI_STACKTRACEINFO ); + } + result = containerAccess->at(__jni_env, container.first, size-1); + }QTJAMBI_CATCH(const JavaException& exn){ + exn.raiseInJava(__jni_env); + }QTJAMBI_TRY_END + return result; +} + // QVector::at(int i) const extern "C" Q_DECL_EXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QVector_at__JI) (JNIEnv *__jni_env, @@ -96,7 +191,13 @@ extern "C" Q_DECL_EXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core QPair container = ContainerAPI::fromNativeId(__this_nativeId); QtJambiAPI::checkNullPointer(__jni_env, container.first, typeid(QVector)); QTJAMBI_NATIVE_INSTANCE_METHOD_CALL("QVector::at(int i) const", container.first) - result = dynamic_cast(container.second)->at(__jni_env, container.first, i0); + AbstractVectorAccess* containerAccess = dynamic_cast(container.second); + Q_ASSERT(containerAccess); + jint size = containerAccess->size(__jni_env, container.first); + if (i0 >= size || i0 < 0) { + Java::Runtime::IndexOutOfBoundsException::throwNew(__jni_env, QString("Accessing container of size %1 at %2").arg(size, i0) QTJAMBI_STACKTRACEINFO ); + } + result = containerAccess->at(__jni_env, container.first, i0); }QTJAMBI_CATCH(const JavaException& exn){ exn.raiseInJava(__jni_env); }QTJAMBI_TRY_END @@ -317,7 +418,13 @@ extern "C" Q_DECL_EXPORT void JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QV QPair container = ContainerAPI::fromNativeId(__this_nativeId); QtJambiAPI::checkNullPointer(__jni_env, container.first, typeid(QVector)); QTJAMBI_NATIVE_INSTANCE_METHOD_CALL("QVector::insert(int i, int count, const T & t)", container.first) - dynamic_cast(container.second)->insert(__jni_env, container.first, i0, count1, t2); + AbstractVectorAccess* containerAccess = dynamic_cast(container.second); + Q_ASSERT(containerAccess); + jint size = containerAccess->size(__jni_env, container.first); + if (i0 >= size || i0 < 0) { + Java::Runtime::IndexOutOfBoundsException::throwNew(__jni_env, QString("Accessing container of size %1 at %2").arg(size, i0) QTJAMBI_STACKTRACEINFO ); + } + containerAccess->insert(__jni_env, container.first, i0, count1, t2); }QTJAMBI_CATCH(const JavaException& exn){ exn.raiseInJava(__jni_env); }QTJAMBI_TRY_END @@ -356,7 +463,16 @@ extern "C" Q_DECL_EXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core QPair container = ContainerAPI::fromNativeId(__this_nativeId); QtJambiAPI::checkNullPointer(__jni_env, container.first, typeid(QVector)); QTJAMBI_NATIVE_INSTANCE_METHOD_CALL("QVector::mid(int pos, int length) const", container.first) - result = dynamic_cast(container.second)->mid(__jni_env, container.first, pos0, length1); + AbstractVectorAccess* containerAccess = dynamic_cast(container.second); + Q_ASSERT(containerAccess); + jint size = containerAccess->size(__jni_env, container.first); + if (pos0 >= size || pos0 < 0) { + Java::Runtime::IndexOutOfBoundsException::throwNew(__jni_env, QString("Accessing container of size %1 at %2").arg(size, pos0) QTJAMBI_STACKTRACEINFO ); + } + if (length1>=0 && pos0+length1 > size) { + Java::Runtime::IndexOutOfBoundsException::throwNew(__jni_env, QString("Accessing container of size %1 at %2 to %3").arg(size, pos0, pos0+length1) QTJAMBI_STACKTRACEINFO ); + } + result = containerAccess->mid(__jni_env, container.first, pos0, length1); }QTJAMBI_CATCH(const JavaException& exn){ exn.raiseInJava(__jni_env); }QTJAMBI_TRY_END @@ -375,7 +491,16 @@ extern "C" Q_DECL_EXPORT void JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QV QPair container = ContainerAPI::fromNativeId(__this_nativeId); QtJambiAPI::checkNullPointer(__jni_env, container.first, typeid(QVector)); QTJAMBI_NATIVE_INSTANCE_METHOD_CALL("QVector::move(int from, int to)", container.first) - dynamic_cast(container.second)->move(__jni_env, container.first, from0, to1); + AbstractVectorAccess* containerAccess = dynamic_cast(container.second); + Q_ASSERT(containerAccess); + jint size = containerAccess->size(__jni_env, container.first); + if (from0 >= size || from0 < 0) { + Java::Runtime::IndexOutOfBoundsException::throwNew(__jni_env, QString("Accessing container of size %1 at %2").arg(size, from0) QTJAMBI_STACKTRACEINFO ); + } + if (to1 >= size && to1 < 0) { + Java::Runtime::IndexOutOfBoundsException::throwNew(__jni_env, QString("Accessing container of size %1 at %2").arg(size, to1) QTJAMBI_STACKTRACEINFO ); + } + containerAccess->move(__jni_env, container.first, from0, to1); }QTJAMBI_CATCH(const JavaException& exn){ exn.raiseInJava(__jni_env); }QTJAMBI_TRY_END @@ -419,6 +544,29 @@ extern "C" Q_DECL_EXPORT jint JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QV return result; } +// QVector::removeOne(const T & t) +extern "C" Q_DECL_EXPORT jboolean JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QVector_removeOne__JLjava_lang_Object_2) + (JNIEnv *__jni_env, + jclass, + QtJambiNativeID __this_nativeId, + jobject t1) +{ + jboolean result = false; + QTJAMBI_TRY{ + QPair container = ContainerAPI::fromNativeId(__this_nativeId); + QtJambiAPI::checkNullPointer(__jni_env, container.first, typeid(QVector)); + QTJAMBI_NATIVE_INSTANCE_METHOD_CALL("QVector::replace(int i, const T & t)", container.first) + AbstractVectorAccess* containerAccess = dynamic_cast(container.second); + Q_ASSERT(containerAccess); + jint i0 = containerAccess->indexOf(__jni_env, container.first, t1, 0); + if ((result = i0 >= 0)) + containerAccess->remove(__jni_env, container.first, i0, 1); + }QTJAMBI_CATCH(const JavaException& exn){ + exn.raiseInJava(__jni_env); + }QTJAMBI_TRY_END + return result; +} + // QVector::remove(int i, int count) extern "C" Q_DECL_EXPORT void JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QVector_remove__JII) (JNIEnv *__jni_env, @@ -431,7 +579,13 @@ extern "C" Q_DECL_EXPORT void JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QV QPair container = ContainerAPI::fromNativeId(__this_nativeId); QtJambiAPI::checkNullPointer(__jni_env, container.first, typeid(QVector)); QTJAMBI_NATIVE_INSTANCE_METHOD_CALL("QVector::remove(int i, int count)", container.first) - dynamic_cast(container.second)->remove(__jni_env, container.first, i0, count1); + AbstractVectorAccess* containerAccess = dynamic_cast(container.second); + Q_ASSERT(containerAccess); + jint size = containerAccess->size(__jni_env, container.first); + if (i0+count1 > size || i0 < 0) { + Java::Runtime::IndexOutOfBoundsException::throwNew(__jni_env, QString("Accessing container of size %1 at %2").arg(size, i0 < 0 ? i0 : i0+count1) QTJAMBI_STACKTRACEINFO ); + } + containerAccess->remove(__jni_env, container.first, i0, count1); }QTJAMBI_CATCH(const JavaException& exn){ exn.raiseInJava(__jni_env); }QTJAMBI_TRY_END @@ -449,7 +603,13 @@ extern "C" Q_DECL_EXPORT void JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QV QPair container = ContainerAPI::fromNativeId(__this_nativeId); QtJambiAPI::checkNullPointer(__jni_env, container.first, typeid(QVector)); QTJAMBI_NATIVE_INSTANCE_METHOD_CALL("QVector::replace(int i, const T & t)", container.first) - dynamic_cast(container.second)->replace(__jni_env, container.first, i0, t1); + AbstractVectorAccess* containerAccess = dynamic_cast(container.second); + Q_ASSERT(containerAccess); + jint size = containerAccess->size(__jni_env, container.first); + if (i0 >= size || i0 < 0) { + Java::Runtime::IndexOutOfBoundsException::throwNew(__jni_env, QString("Accessing container of size %1 at %2").arg(size, i0) QTJAMBI_STACKTRACEINFO ); + } + containerAccess->replace(__jni_env, container.first, i0, t1); }QTJAMBI_CATCH(const JavaException& exn){ exn.raiseInJava(__jni_env); }QTJAMBI_TRY_END @@ -591,9 +751,18 @@ extern "C" Q_DECL_EXPORT void JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QV { QTJAMBI_TRY{ QPair container = ContainerAPI::fromNativeId(__this_nativeId); - QtJambiAPI::checkNullPointer(__jni_env, container.first, typeid(QList)); + QtJambiAPI::checkNullPointer(__jni_env, container.first, typeid(QVector)); QTJAMBI_NATIVE_INSTANCE_METHOD_CALL("QVector::swapItemsAt(int i, int j)", container.first) - dynamic_cast(container.second)->swapItemsAt(__jni_env, container.first, i0, j1); + AbstractVectorAccess* containerAccess = dynamic_cast(container.second); + Q_ASSERT(containerAccess); + jint size = containerAccess->size(__jni_env, container.first); + if (i0 >= size || i0 < 0) { + Java::Runtime::IndexOutOfBoundsException::throwNew(__jni_env, QString("Accessing container of size %1 at %2").arg(size, i0) QTJAMBI_STACKTRACEINFO ); + } + if (j1 >= size || j1 < 0) { + Java::Runtime::IndexOutOfBoundsException::throwNew(__jni_env, QString("Accessing container of size %1 at %2").arg(size, j1) QTJAMBI_STACKTRACEINFO ); + } + containerAccess->swapItemsAt(__jni_env, container.first, i0, j1); }QTJAMBI_CATCH(const JavaException& exn){ exn.raiseInJava(__jni_env); }QTJAMBI_TRY_END diff --git a/src/cpp/QtJambiCore/impl.cpp b/src/cpp/QtJambiCore/impl.cpp index 4cafee2b..a9ad1022 100644 --- a/src/cpp/QtJambiCore/impl.cpp +++ b/src/cpp/QtJambiCore/impl.cpp @@ -884,10 +884,9 @@ QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QLogging_showCMessageFromSupplier) { #if !defined(QT_NO_DEBUG_OUTPUT) QTJAMBI_TRY{ - QLoggingCategory& category = QtJambiAPI::objectReferenceFromNativeId(env, categoryId); - if (messageType != QtMsgType::QtFatalMsg && !category.isEnabled(QtMsgType(messageType))) { + const QLoggingCategory& category = QtJambiAPI::objectReferenceFromNativeId(env, categoryId); + if (messageType != QtMsgType::QtFatalMsg && !category.isEnabled(QtMsgType(messageType))) return; - } jstring message = Java::Runtime::Object::toString(env, Java::Runtime::Supplier::get(env, messageSupplier)); const char* _message = env->GetStringUTFChars(message, nullptr); const char* _method = nullptr; @@ -947,64 +946,92 @@ QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QLogging_showCMessageFromSupplier) #endif } +class SilentDevice : public QIODevice{ +public: + SilentDevice() : QIODevice(){ + moveToThread(nullptr); + } + + qint64 readData(char *, qint64) override{ + return 0; + } + + qint64 writeData(const char *, qint64) override{ + return 0; + } +}; + +Q_GLOBAL_STATIC(SilentDevice, gSilentDevice) + extern "C" Q_DECL_EXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QLogging_getDebug) (JNIEnv *env, jclass loggingClass, jint messageType) { jobject result = nullptr; #if !defined(QT_NO_DEBUG_OUTPUT) + bool enabled = true; + if (messageType != QtMsgType::QtFatalMsg) { + if (QLoggingCategory *defaultCategory = QLoggingCategory::defaultCategory()) { + enabled = defaultCategory->isEnabled(QtMsgType(messageType)); + } + } QTJAMBI_TRY{ - const char* _method = nullptr; - const char* _className = nullptr; - int line = 0; + if(enabled){ + const char* _method = nullptr; + const char* _className = nullptr; + int line = 0; #if !defined (QT_NO_DEBUG) - jobject invocationInfoProvider = Java::QtJambi::ReflectionUtility::invocationInfoProvider(env); - jint offset = 2; - jobject invocationInfo = Java::Runtime::IntFunction::apply(env, invocationInfoProvider, offset); - jclass declaringClass = Java::QtJambi::InternalAccess$CallerContext::declaringClass(env, invocationInfo); - while(env->IsSameObject(declaringClass, loggingClass)){ - invocationInfo = Java::Runtime::IntFunction::apply(env, invocationInfoProvider, ++offset); - declaringClass = Java::QtJambi::InternalAccess$CallerContext::declaringClass(env, invocationInfo); - } - jstring method = Java::QtJambi::InternalAccess$CallerContext::methodName(env, invocationInfo); - line = Java::QtJambi::InternalAccess$CallerContext::lineNumber(env, invocationInfo); - jobject _data = qtjambi_cast(env, QByteArray()); - QByteArray* data = qtjambi_cast(env, _data); - _method = env->GetStringUTFChars(method, nullptr); - data->append(_method); - data->append('\0'); - env->ReleaseStringUTFChars(method, _method); - auto size = data->size(); - jstring className = Java::Runtime::Class::getName(env, declaringClass); - _className = env->GetStringUTFChars(className, nullptr); - data->append(_className); - env->ReleaseStringUTFChars(className, _className); - _method = data->constData(); - _className = data->constData()+size; + jobject invocationInfoProvider = Java::QtJambi::ReflectionUtility::invocationInfoProvider(env); + jint offset = 2; + jobject invocationInfo = Java::Runtime::IntFunction::apply(env, invocationInfoProvider, offset); + jclass declaringClass = Java::QtJambi::InternalAccess$CallerContext::declaringClass(env, invocationInfo); + while(env->IsSameObject(declaringClass, loggingClass)){ + invocationInfo = Java::Runtime::IntFunction::apply(env, invocationInfoProvider, ++offset); + declaringClass = Java::QtJambi::InternalAccess$CallerContext::declaringClass(env, invocationInfo); + } + jstring method = Java::QtJambi::InternalAccess$CallerContext::methodName(env, invocationInfo); + line = Java::QtJambi::InternalAccess$CallerContext::lineNumber(env, invocationInfo); + jobject _data = qtjambi_cast(env, QByteArray()); + QByteArray* data = qtjambi_cast(env, _data); + _method = env->GetStringUTFChars(method, nullptr); + data->append(_method); + data->append('\0'); + env->ReleaseStringUTFChars(method, _method); + auto size = data->size(); + jstring className = Java::Runtime::Class::getName(env, declaringClass); + _className = env->GetStringUTFChars(className, nullptr); + data->append(_className); + env->ReleaseStringUTFChars(className, _className); + _method = data->constData(); + _className = data->constData()+size; #else - Q_UNUSED(loggingClass) + Q_UNUSED(loggingClass) #endif - QMessageLogger logger(_className, line, _method); - switch(messageType){ - case QtMsgType::QtWarningMsg: - result = qtjambi_cast(env, logger.warning()); - break; - case QtMsgType::QtCriticalMsg: - result = qtjambi_cast(env, logger.critical()); - break; - case QtMsgType::QtDebugMsg: - result = qtjambi_cast(env, logger.debug()); - break; - case QtMsgType::QtInfoMsg: - result = qtjambi_cast(env, logger.info()); - break; - default: - break; - } + QMessageLogger logger(_className, line, _method); + switch(messageType){ + case QtMsgType::QtWarningMsg: + result = qtjambi_cast(env, logger.warning()); + break; + case QtMsgType::QtCriticalMsg: + result = qtjambi_cast(env, logger.critical()); + break; + case QtMsgType::QtDebugMsg: + result = qtjambi_cast(env, logger.debug()); + break; + case QtMsgType::QtInfoMsg: + result = qtjambi_cast(env, logger.info()); + break; + default: + break; + } #if !defined (QT_NO_DEBUG) - if(result) - Java::QtCore::QDebug::set___rcDevice(env, result, _data); + if(result) + Java::QtCore::QDebug::set___rcDevice(env, result, _data); #endif + }else{ + result = qtjambi_cast(env, QDebug(gSilentDevice())); + Java::QtCore::QDebug::set_disabled(env, result, true); + } }QTJAMBI_CATCH(const JavaException& exn){ exn.raiseInJava(env); }QTJAMBI_TRY_END @@ -1023,58 +1050,63 @@ QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QLogging_getCDebug) jobject result = nullptr; #if !defined(QT_NO_DEBUG_OUTPUT) QTJAMBI_TRY{ - QLoggingCategory& category = QtJambiAPI::objectReferenceFromNativeId(env, categoryId); - const char* _method = nullptr; - const char* _className = nullptr; - int line = 0; + const QLoggingCategory& category = QtJambiAPI::objectReferenceFromNativeId(env, categoryId); + if(messageType != QtMsgType::QtFatalMsg && category.isEnabled(QtMsgType(messageType))){ + const char* _method = nullptr; + const char* _className = nullptr; + int line = 0; #if !defined (QT_NO_DEBUG) - jobject invocationInfoProvider = Java::QtJambi::ReflectionUtility::invocationInfoProvider(env); - jint offset = 2; - jobject invocationInfo = Java::Runtime::IntFunction::apply(env, invocationInfoProvider, offset); - jclass declaringClass = Java::QtJambi::InternalAccess$CallerContext::declaringClass(env, invocationInfo); - while(env->IsSameObject(declaringClass, loggingClass)){ - invocationInfo = Java::Runtime::IntFunction::apply(env, invocationInfoProvider, ++offset); - declaringClass = Java::QtJambi::InternalAccess$CallerContext::declaringClass(env, invocationInfo); - } - jstring method = Java::QtJambi::InternalAccess$CallerContext::methodName(env, invocationInfo); - line = Java::QtJambi::InternalAccess$CallerContext::lineNumber(env, invocationInfo); - jobject _data = qtjambi_cast(env, QByteArray()); - QByteArray* data = qtjambi_cast(env, _data); - _method = env->GetStringUTFChars(method, nullptr); - data->append(_method); - data->append('\0'); - env->ReleaseStringUTFChars(method, _method); - auto size = data->size(); - jstring className = Java::Runtime::Class::getName(env, declaringClass); - _className = env->GetStringUTFChars(className, nullptr); - data->append(_className); - env->ReleaseStringUTFChars(className, _className); - _method = data->constData(); - _className = data->constData()+size; + jobject invocationInfoProvider = Java::QtJambi::ReflectionUtility::invocationInfoProvider(env); + jint offset = 2; + jobject invocationInfo = Java::Runtime::IntFunction::apply(env, invocationInfoProvider, offset); + jclass declaringClass = Java::QtJambi::InternalAccess$CallerContext::declaringClass(env, invocationInfo); + while(env->IsSameObject(declaringClass, loggingClass)){ + invocationInfo = Java::Runtime::IntFunction::apply(env, invocationInfoProvider, ++offset); + declaringClass = Java::QtJambi::InternalAccess$CallerContext::declaringClass(env, invocationInfo); + } + jstring method = Java::QtJambi::InternalAccess$CallerContext::methodName(env, invocationInfo); + line = Java::QtJambi::InternalAccess$CallerContext::lineNumber(env, invocationInfo); + jobject _data = qtjambi_cast(env, QByteArray()); + QByteArray* data = qtjambi_cast(env, _data); + _method = env->GetStringUTFChars(method, nullptr); + data->append(_method); + data->append('\0'); + env->ReleaseStringUTFChars(method, _method); + auto size = data->size(); + jstring className = Java::Runtime::Class::getName(env, declaringClass); + _className = env->GetStringUTFChars(className, nullptr); + data->append(_className); + env->ReleaseStringUTFChars(className, _className); + _method = data->constData(); + _className = data->constData()+size; #else - Q_UNUSED(loggingClass) + Q_UNUSED(loggingClass) #endif - QMessageLogger logger(_className, line, _method, category.categoryName()); - switch(messageType){ - case QtMsgType::QtWarningMsg: - result = qtjambi_cast(env, logger.warning(category)); - break; - case QtMsgType::QtCriticalMsg: - result = qtjambi_cast(env, logger.critical(category)); - break; - case QtMsgType::QtDebugMsg: - result = qtjambi_cast(env, logger.debug(category)); - break; - case QtMsgType::QtInfoMsg: - result = qtjambi_cast(env, logger.info(category)); - break; - default: - break; - } + QMessageLogger logger(_className, line, _method, category.categoryName()); + switch(messageType){ + case QtMsgType::QtWarningMsg: + result = qtjambi_cast(env, logger.warning(category)); + break; + case QtMsgType::QtCriticalMsg: + result = qtjambi_cast(env, logger.critical(category)); + break; + case QtMsgType::QtDebugMsg: + result = qtjambi_cast(env, logger.debug(category)); + break; + case QtMsgType::QtInfoMsg: + result = qtjambi_cast(env, logger.info(category)); + break; + default: + break; + } #if !defined (QT_NO_DEBUG) - if(result) - Java::QtCore::QDebug::set___rcDevice(env, result, _data); + if(result) + Java::QtCore::QDebug::set___rcDevice(env, result, _data); #endif + }else{ + result = qtjambi_cast(env, QDebug(gSilentDevice())); + Java::QtCore::QDebug::set_disabled(env, result, true); + } }QTJAMBI_CATCH(const JavaException& exn){ exn.raiseInJava(env); }QTJAMBI_TRY_END @@ -1092,7 +1124,9 @@ QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QLogging_showCMessage) { #if !defined(QT_NO_DEBUG_OUTPUT) QTJAMBI_TRY{ - QLoggingCategory& category = QtJambiAPI::objectReferenceFromNativeId(env, categoryId); + const QLoggingCategory& category = QtJambiAPI::objectReferenceFromNativeId(env, categoryId); + if (messageType != QtMsgType::QtFatalMsg && !category.isEnabled(QtMsgType(messageType))) + return; const char* _message = env->GetStringUTFChars(message, nullptr); const char* _method = nullptr; const char* _className = nullptr; @@ -1156,13 +1190,13 @@ QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QLogging_showMessageFromSupplier) (JNIEnv *env, jclass loggingClass, jint messageType, jobject messageSupplier) { #if !defined(QT_NO_DEBUG_OUTPUT) - QTJAMBI_TRY{ - if (messageType != QtMsgType::QtFatalMsg) { - if (QLoggingCategory *defaultCategory = QLoggingCategory::defaultCategory()) { - if (!defaultCategory->isEnabled(QtMsgType(messageType))) - return; - } + if (messageType != QtMsgType::QtFatalMsg) { + if (QLoggingCategory *defaultCategory = QLoggingCategory::defaultCategory()) { + if (!defaultCategory->isEnabled(QtMsgType(messageType))) + return; } + } + QTJAMBI_TRY{ jstring message = Java::Runtime::Object::toString(env, Java::Runtime::Supplier::get(env, messageSupplier)); const char* _message = env->GetStringUTFChars(message, nullptr); const char* _method = nullptr; @@ -1227,6 +1261,12 @@ QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QLogging_showMessage) (JNIEnv *env, jclass loggingClass, jint messageType, jstring message) { #if !defined(QT_NO_DEBUG_OUTPUT) + if (messageType != QtMsgType::QtFatalMsg) { + if (QLoggingCategory *defaultCategory = QLoggingCategory::defaultCategory()) { + if (!defaultCategory->isEnabled(QtMsgType(messageType))) + return; + } + } QTJAMBI_TRY{ const char* _message = env->GetStringUTFChars(message, nullptr); const char* _method = nullptr; diff --git a/src/cpp/QtJambiCore/utils.cpp b/src/cpp/QtJambiCore/utils.cpp index 17a606ed..6d436392 100644 --- a/src/cpp/QtJambiCore/utils.cpp +++ b/src/cpp/QtJambiCore/utils.cpp @@ -207,6 +207,7 @@ QTJAMBI_REPOSITORY_DEFINE_CLASS(io/qt/core,QSharedMemory, QTJAMBI_REPOSITORY_DEFINE_CLASS(io/qt/core,QDebug, QTJAMBI_REPOSITORY_DEFINE_FIELD(__rcDevice,Ljava/lang/Object;) + QTJAMBI_REPOSITORY_DEFINE_FIELD(disabled,Z) ) QTJAMBI_REPOSITORY_DEFINE_CLASS(io/qt/core,QRunnable,) diff --git a/src/cpp/QtJambiCore/utils_p.h b/src/cpp/QtJambiCore/utils_p.h index b46d0bf6..7ef5fdc5 100644 --- a/src/cpp/QtJambiCore/utils_p.h +++ b/src/cpp/QtJambiCore/utils_p.h @@ -69,7 +69,8 @@ namespace QtCore QTJAMBI_REPOSITORY_DECLARE_CLASS(QUnhandledException, ) QTJAMBI_REPOSITORY_DECLARE_CLASS(QDebug, - QTJAMBI_REPOSITORY_DECLARE_OBJECT_FIELD(__rcDevice)) + QTJAMBI_REPOSITORY_DECLARE_OBJECT_FIELD(__rcDevice) + QTJAMBI_REPOSITORY_DECLARE_BOOLEAN_FIELD(disabled)) QTJAMBI_REPOSITORY_DECLARE_CLASS(QCborStreamReader$StringResult, QTJAMBI_REPOSITORY_DECLARE_CONSTRUCTOR()) QTJAMBI_REPOSITORY_DECLARE_CLASS(QCborValue$FromCborResult, diff --git a/src/cpp/QtJambiGenerator/cppimplgenerator.cpp b/src/cpp/QtJambiGenerator/cppimplgenerator.cpp index d56bfe88..9d601f53 100644 --- a/src/cpp/QtJambiGenerator/cppimplgenerator.cpp +++ b/src/cpp/QtJambiGenerator/cppimplgenerator.cpp @@ -1894,16 +1894,17 @@ void CppImplGenerator::writeToStringFunction(QTextStream &s, const MetaClass *ja auto indirections = toStringFun->arguments().at(1)->type()->indirections().size(); QString deref = QLatin1String(indirections == 0 ? "*" : ""); - QStringList lines; + bool hasInjectedJavaCode = false; for(const CodeSnip& codeSnip : java_class->typeEntry()->codeSnips()){ - if(codeSnip.language==TS::NativeCode && codeSnip.position==CodeSnip::ToString){ - lines << codeSnip.code().split("\n"); + if(codeSnip.language==TS::TargetLangCode && codeSnip.position==CodeSnip::ToString){ + hasInjectedJavaCode = true; + break; } } s << Qt::endl << "#include " << Qt::endl << INDENT; - if(lines.isEmpty() && !java_class->typeEntry()->isNativeIdBased() && !java_class->typeEntry()->designatedInterface()){ + if(!hasInjectedJavaCode && !java_class->typeEntry()->isNativeIdBased() && !java_class->typeEntry()->designatedInterface()){ s << jni_function_signature(java_class->package(), java_class->name(), "toString", "jstring"); }else{ s << jni_function_signature(java_class->package(), java_class->name(), "toString_native", "jstring"); @@ -1954,6 +1955,7 @@ void CppImplGenerator::writeToStringFunction(QTextStream &s, const MetaClass *ja s << INDENT << "QString res;" << Qt::endl << INDENT << "QDebug(&res) << " << deref << "__qt_this;" << Qt::endl; s << INDENT << "__java_return_value = qtjambi_cast(__jni_env, res);" << Qt::endl; + writeClassCodeInjections(s, java_class, CodeSnip::ToString); if(!java_class->typeEntry()->ppCondition().isEmpty()){ s << Qt::endl << "#else" << Qt::endl << INDENT << "Q_UNUSED("; @@ -1980,8 +1982,15 @@ void CppImplGenerator::writeCloneFunction(QTextStream &s, const MetaClass *java_ if(java_class->typeEntry() && java_class->typeEntry()->designatedInterface()){ name = java_class->typeEntry()->designatedInterface()->targetLangName(); } + bool hasInjectedJavaCode = false; + for(const CodeSnip& codeSnip : java_class->typeEntry()->codeSnips()){ + if(codeSnip.language==TS::TargetLangCode && codeSnip.position==CodeSnip::Clone){ + hasInjectedJavaCode = true; + break; + } + } QString functionName = "clone"; - if(java_class->typeEntry()->isNativeIdBased() || java_class->typeEntry()->designatedInterface()){ + if(java_class->typeEntry()->isNativeIdBased() || java_class->typeEntry()->designatedInterface() || hasInjectedJavaCode){ functionName += "_native"; } s << Qt::endl @@ -2059,6 +2068,7 @@ void CppImplGenerator::writeCloneFunction(QTextStream &s, const MetaClass *java_ s << INDENT << "__java_return_value = QtJambiAPI::convertNativeToJavaOwnedObjectAsWrapper(__jni_env, new " << java_class->fullQualifiedCppName() << "(*__qt_this));" << Qt::endl; } } + writeClassCodeInjections(s, java_class, CodeSnip::Clone); if(!java_class->typeEntry()->ppCondition().isEmpty()){ s << Qt::endl << "#else" << Qt::endl << INDENT << "Q_UNUSED("; diff --git a/src/cpp/QtJambiGenerator/javagenerator.cpp b/src/cpp/QtJambiGenerator/javagenerator.cpp index ca9aa4fd..b548fc4b 100644 --- a/src/cpp/QtJambiGenerator/javagenerator.cpp +++ b/src/cpp/QtJambiGenerator/javagenerator.cpp @@ -8364,10 +8364,13 @@ void JavaGenerator::writeExtraFunctions(QTextStream &s, const MetaClass *java_cl QStringList lines; for(const CodeSnip &snip : class_type->codeSnips()) { - if (snip.position!=CodeSnip::Equals - && snip.position!=CodeSnip::Compare - && snip.position!=CodeSnip::HashCode - && snip.position!=CodeSnip::ToString + if((snip.position==CodeSnip::Beginning + || snip.position==CodeSnip::Position1 + || snip.position==CodeSnip::Position2 + || snip.position==CodeSnip::Position3 + || snip.position==CodeSnip::Position4 + || snip.position==CodeSnip::Position5 + || snip.position==CodeSnip::End) && ((!java_class->isInterface() && snip.language == TS::TargetLangCode) || (java_class->isInterface() && snip.language == TS::Interface))) { lines << snip.code().split("\n"); @@ -8383,10 +8386,13 @@ void JavaGenerator::writeExtraFunctions(QTextStream &s, const MetaFunctional *ja QStringList lines; for(const CodeSnip &snip : class_type->codeSnips()) { - if (snip.position!=CodeSnip::Equals - && snip.position!=CodeSnip::Compare - && snip.position!=CodeSnip::HashCode - && snip.position!=CodeSnip::ToString + if((snip.position==CodeSnip::Beginning + || snip.position==CodeSnip::Position1 + || snip.position==CodeSnip::Position2 + || snip.position==CodeSnip::Position3 + || snip.position==CodeSnip::Position4 + || snip.position==CodeSnip::Position5 + || snip.position==CodeSnip::End) && ((!inInterface && snip.language == TS::TargetLangCode) || (inInterface && snip.language == TS::Interface))) { lines << snip.code().split("\n"); @@ -8475,10 +8481,57 @@ void JavaGenerator::writeToStringFunction(QTextStream &s, const MetaClass *java_ void JavaGenerator::writeCloneFunction(QTextStream &s, const MetaClass *java_class) { s << INDENT << Qt::endl + << INDENT << "/**" << Qt::endl + << INDENT << " *

Creates and returns a copy of this object.

" << Qt::endl; + if(java_class->hasPublicCopyConstructor()){ + MetaFunctionList functions = java_class->queryFunctions(Constructors); + for(MetaFunction *f : functions) { + if ((f->wasPublic() || f->isPublic()) + && !f->isInvalid() + && !f->isEmptyFunction() && !f->isFake() + && f->implementingClass()==java_class + && f->actualMinimumArgumentCount()==1 + && f->arguments()[0]->type()->isConstant() + && f->arguments()[0]->type()->getReferenceType()==MetaType::Reference + && f->arguments()[0]->type()->typeEntry()==java_class->typeEntry()) { + QString url = docsUrl+f->href(); + s << "

See "; + s << java_class->qualifiedCppName() + .replace("", "") + .replace("QtJambi", "Q") + .replace("QVoid", "Q") + .replace("&", "&") + .replace("<", "<") + .replace(">", ">") + .replace("\t", "    ") + .replace("@", "@") + .replace("/*", "/*") + .replace("*/", "*/") + << "::"; + s << QString(f->originalSignature()) + .replace("&", "&") + .replace("<", "<") + .replace(">", ">") + .replace("\t", "    ") + .replace("@", "@") + .replace("/*", "/*") + .replace("*/", "*/") + << "

" << Qt::endl; + break; + } + } + } + s << INDENT << " */" << Qt::endl << INDENT << "@QtUninvokable" << Qt::endl << INDENT << "@Override" << Qt::endl << INDENT << "public "; - if(!java_class->typeEntry()->isNativeIdBased() && !java_class->typeEntry()->designatedInterface()){ + QStringList lines; + for(const CodeSnip& codeSnip : java_class->typeEntry()->codeSnips()){ + if(codeSnip.language==TS::TargetLangCode && codeSnip.position==CodeSnip::Clone){ + lines << codeSnip.code().split("\n"); + } + } + if(!java_class->typeEntry()->isNativeIdBased() && !java_class->typeEntry()->designatedInterface() && lines.isEmpty()){ s << "native "; } s << java_class->simpleName(); @@ -8498,22 +8551,36 @@ void JavaGenerator::writeCloneFunction(QTextStream &s, const MetaClass *java_cla } s << ">"; } - if(!java_class->typeEntry()->isNativeIdBased() && !java_class->typeEntry()->designatedInterface()){ + if(!java_class->typeEntry()->isNativeIdBased() && !java_class->typeEntry()->designatedInterface() && lines.isEmpty()){ s << " clone();" << Qt::endl; }else{ QString name = java_class->name(); if(java_class->typeEntry() && java_class->typeEntry()->designatedInterface()){ name = java_class->typeEntry()->designatedInterface()->targetLangName(); } - s << " clone() {" << Qt::endl - << INDENT << " return clone_native("; - if(java_class->typeEntry()->isNativeIdBased()){ - s << "QtJambi_LibraryUtilities.internal.nativeId(this)"; + s << " clone() {" << Qt::endl; + if(!lines.isEmpty()){ + INDENTATION(INDENT) + s << INDENT << java_class->simpleName() << " clone = clone_native("; + if(java_class->typeEntry()->isNativeIdBased()){ + s << "QtJambi_LibraryUtilities.internal.nativeId(this)"; + }else{ + s << "this"; + } + s << ");" << Qt::endl; + printExtraCode(lines, s); + s << INDENT << "return clone;" << Qt::endl; }else{ - s << "this"; + INDENTATION(INDENT) + s << INDENT << "return clone_native("; + if(java_class->typeEntry()->isNativeIdBased()){ + s << "QtJambi_LibraryUtilities.internal.nativeId(this)"; + }else{ + s << "this"; + } + s << ");" << Qt::endl; } - s << ");" << Qt::endl - << INDENT << "}" << Qt::endl + s << INDENT << "}" << Qt::endl << INDENT << "private static native "; if(java_class->typeEntry()->isGenericClass()){ s << "<"; diff --git a/src/cpp/QtJambiGenerator/typesystem/codesnip.h b/src/cpp/QtJambiGenerator/typesystem/codesnip.h index cf1b88c7..78ee456c 100644 --- a/src/cpp/QtJambiGenerator/typesystem/codesnip.h +++ b/src/cpp/QtJambiGenerator/typesystem/codesnip.h @@ -111,6 +111,7 @@ class CodeSnip : public CodeSnipAbstract { Compare, HashCode, ToString, + Clone, Comment, End = 1024 }; diff --git a/src/cpp/QtJambiGenerator/typesystem/java/QtJambiCore.java b/src/cpp/QtJambiGenerator/typesystem/java/QtJambiCore.java index bbf28f5e..1a9620a6 100644 --- a/src/cpp/QtJambiGenerator/typesystem/java/QtJambiCore.java +++ b/src/cpp/QtJambiGenerator/typesystem/java/QtJambiCore.java @@ -36,68 +36,6 @@ import io.qt.internal.QtJambiObject.QPrivateConstructor; import io.qt.core.*; -class QtJambi_LibraryUtilities_2_{ - if(!Boolean.getBoolean("io.qt.no-library-shutdown-hook")) { - shutdownHook = RetroHelper.newShutdownThread(QtJambi_LibraryUtilities::shutdown, "QtJambi_LibraryShutdown"); - shutdownHook.setContextClassLoader(null); - Runtime.getRuntime().addShutdownHook(shutdownHook); - } - java.io.File coreLib = LibraryUtility.loadQtCore(); - try{ - java.io.File qtjambiLib = LibraryUtility.loadQtJambiLibrary(); - if(LibraryUtility.operatingSystem!=LibraryUtility.OperatingSystem.Android) { - List paths = new ArrayList<>(); - String path; - switch(LibraryUtility.operatingSystem) { - case MacOS: - path = QtUtilities.getenv("DYLD_LIBRARY_PATH"); - String path2 = QtUtilities.getenv("DYLD_FRAMEWORK_PATH"); - List paths2 = new ArrayList<>(); - paths2.add(qtjambiLib.getParentFile().getAbsolutePath()); - if(path2!=null && !path2.isEmpty()) { - for(String p : path2.split("\\"+java.io.File.pathSeparator)) { - if(!paths2.contains(p)) - paths2.add(p); - } - } - path2 = String.join(java.io.File.pathSeparator, paths2); - QtUtilities.putenv("DYLD_FRAMEWORK_PATH", path2); - break; - case Windows: - path = QtUtilities.getenv("PATH"); - break; - default: - path = QtUtilities.getenv("LD_LIBRARY_PATH"); - break; - } - if(LibraryUtility.operatingSystem!=LibraryUtility.OperatingSystem.MacOS) - paths.add(coreLib.getParentFile().getAbsolutePath()); - if(!paths.contains(qtjambiLib.getParentFile().getAbsolutePath())) - paths.add(qtjambiLib.getParentFile().getAbsolutePath()); - if(path!=null && !path.isEmpty()) { - for(String p : path.split("\\"+java.io.File.pathSeparator)) { - if(!paths.contains(p)) - paths.add(p); - } - } - path = String.join(java.io.File.pathSeparator, paths); - switch(LibraryUtility.operatingSystem) { - case MacOS: - QtUtilities.putenv("DYLD_LIBRARY_PATH", path); - break; - case Windows: - QtUtilities.putenv("PATH", path); - break; - default: - QtUtilities.putenv("LD_LIBRARY_PATH", path); - break; - } - } - } catch(UnsatisfiedLinkError t) { - LibraryUtility.analyzeUnsatisfiedLinkError(t, coreLib); - } -}// class - class QObject___ extends QObject { /** @@ -10247,7 +10185,9 @@ class QDebug___ extends QDebug { */ @Override public final @NonNull QDebug append(CharSequence csq, int start, int end) { - return append(csq==null ? "null" : csq.subSequence(start, end)); + if(!disabled) + append(csq==null ? "null" : csq.subSequence(start, end)); + return this; } /** @@ -10255,7 +10195,8 @@ class QDebug___ extends QDebug { */ @QtUninvokable public final @NonNull QDebug endl(){ - endl(QtJambi_LibraryUtilities.internal.nativeId(this)); + if(!disabled) + endl(QtJambi_LibraryUtilities.internal.nativeId(this)); return this; } @@ -10267,7 +10208,8 @@ class QDebug___ extends QDebug { */ @QtUninvokable public final @NonNull QDebug flush(){ - flush(QtJambi_LibraryUtilities.internal.nativeId(this)); + if(!disabled) + flush(QtJambi_LibraryUtilities.internal.nativeId(this)); return this; } @@ -10279,7 +10221,8 @@ class QDebug___ extends QDebug { */ @QtUninvokable public final @NonNull QDebug reset(){ - reset(QtJambi_LibraryUtilities.internal.nativeId(this)); + if(!disabled) + reset(QtJambi_LibraryUtilities.internal.nativeId(this)); return this; } @@ -10291,7 +10234,8 @@ class QDebug___ extends QDebug { */ @QtUninvokable public final @NonNull QDebug bin(){ - bin(QtJambi_LibraryUtilities.internal.nativeId(this)); + if(!disabled) + bin(QtJambi_LibraryUtilities.internal.nativeId(this)); return this; } @@ -10303,7 +10247,8 @@ class QDebug___ extends QDebug { */ @QtUninvokable public final @NonNull QDebug oct(){ - oct(QtJambi_LibraryUtilities.internal.nativeId(this)); + if(!disabled) + oct(QtJambi_LibraryUtilities.internal.nativeId(this)); return this; } @@ -10315,7 +10260,8 @@ class QDebug___ extends QDebug { */ @QtUninvokable public final @NonNull QDebug hex(){ - hex(QtJambi_LibraryUtilities.internal.nativeId(this)); + if(!disabled) + hex(QtJambi_LibraryUtilities.internal.nativeId(this)); return this; } @@ -10327,7 +10273,8 @@ class QDebug___ extends QDebug { */ @QtUninvokable public final @NonNull QDebug dec(){ - dec(QtJambi_LibraryUtilities.internal.nativeId(this)); + if(!disabled) + dec(QtJambi_LibraryUtilities.internal.nativeId(this)); return this; } @@ -10339,7 +10286,8 @@ class QDebug___ extends QDebug { */ @QtUninvokable public final @NonNull QDebug showbase(){ - showbase(QtJambi_LibraryUtilities.internal.nativeId(this)); + if(!disabled) + showbase(QtJambi_LibraryUtilities.internal.nativeId(this)); return this; } @@ -10351,7 +10299,8 @@ class QDebug___ extends QDebug { */ @QtUninvokable public final @NonNull QDebug forcesign(){ - forcesign(QtJambi_LibraryUtilities.internal.nativeId(this)); + if(!disabled) + forcesign(QtJambi_LibraryUtilities.internal.nativeId(this)); return this; } @@ -10363,7 +10312,8 @@ class QDebug___ extends QDebug { */ @QtUninvokable public final @NonNull QDebug forcepoint(){ - forcepoint(QtJambi_LibraryUtilities.internal.nativeId(this)); + if(!disabled) + forcepoint(QtJambi_LibraryUtilities.internal.nativeId(this)); return this; } @@ -10375,7 +10325,8 @@ class QDebug___ extends QDebug { */ @QtUninvokable public final @NonNull QDebug noshowbase(){ - noshowbase(QtJambi_LibraryUtilities.internal.nativeId(this)); + if(!disabled) + noshowbase(QtJambi_LibraryUtilities.internal.nativeId(this)); return this; } @@ -10387,7 +10338,8 @@ class QDebug___ extends QDebug { */ @QtUninvokable public final @NonNull QDebug noforcesign(){ - noforcesign(QtJambi_LibraryUtilities.internal.nativeId(this)); + if(!disabled) + noforcesign(QtJambi_LibraryUtilities.internal.nativeId(this)); return this; } @@ -10399,7 +10351,8 @@ class QDebug___ extends QDebug { */ @QtUninvokable public final @NonNull QDebug noforcepoint(){ - noforcepoint(QtJambi_LibraryUtilities.internal.nativeId(this)); + if(!disabled) + noforcepoint(QtJambi_LibraryUtilities.internal.nativeId(this)); return this; } @@ -10411,7 +10364,8 @@ class QDebug___ extends QDebug { */ @QtUninvokable public final @NonNull QDebug uppercasebase(){ - uppercasebase(QtJambi_LibraryUtilities.internal.nativeId(this)); + if(!disabled) + uppercasebase(QtJambi_LibraryUtilities.internal.nativeId(this)); return this; } @@ -10423,7 +10377,8 @@ class QDebug___ extends QDebug { */ @QtUninvokable public final @NonNull QDebug uppercasedigits(){ - uppercasedigits(QtJambi_LibraryUtilities.internal.nativeId(this)); + if(!disabled) + uppercasedigits(QtJambi_LibraryUtilities.internal.nativeId(this)); return this; } @@ -10435,7 +10390,8 @@ class QDebug___ extends QDebug { */ @QtUninvokable public final @NonNull QDebug lowercasebase(){ - lowercasebase(QtJambi_LibraryUtilities.internal.nativeId(this)); + if(!disabled) + lowercasebase(QtJambi_LibraryUtilities.internal.nativeId(this)); return this; } @@ -10447,7 +10403,8 @@ class QDebug___ extends QDebug { */ @QtUninvokable public final @NonNull QDebug lowercasedigits(){ - lowercasedigits(QtJambi_LibraryUtilities.internal.nativeId(this)); + if(!disabled) + lowercasedigits(QtJambi_LibraryUtilities.internal.nativeId(this)); return this; } @@ -10459,7 +10416,8 @@ class QDebug___ extends QDebug { */ @QtUninvokable public final @NonNull QDebug fixed(){ - fixed(QtJambi_LibraryUtilities.internal.nativeId(this)); + if(!disabled) + fixed(QtJambi_LibraryUtilities.internal.nativeId(this)); return this; } @@ -10471,7 +10429,8 @@ class QDebug___ extends QDebug { */ @QtUninvokable public final @NonNull QDebug scientific(){ - scientific(QtJambi_LibraryUtilities.internal.nativeId(this)); + if(!disabled) + scientific(QtJambi_LibraryUtilities.internal.nativeId(this)); return this; } @@ -10483,7 +10442,8 @@ class QDebug___ extends QDebug { */ @QtUninvokable public final @NonNull QDebug left(){ - left(QtJambi_LibraryUtilities.internal.nativeId(this)); + if(!disabled) + left(QtJambi_LibraryUtilities.internal.nativeId(this)); return this; } @@ -10495,7 +10455,8 @@ class QDebug___ extends QDebug { */ @QtUninvokable public final @NonNull QDebug right(){ - right(QtJambi_LibraryUtilities.internal.nativeId(this)); + if(!disabled) + right(QtJambi_LibraryUtilities.internal.nativeId(this)); return this; } @@ -10507,7 +10468,8 @@ class QDebug___ extends QDebug { */ @QtUninvokable public final @NonNull QDebug center(){ - center(QtJambi_LibraryUtilities.internal.nativeId(this)); + if(!disabled) + center(QtJambi_LibraryUtilities.internal.nativeId(this)); return this; } @@ -10519,7 +10481,8 @@ class QDebug___ extends QDebug { */ @QtUninvokable public final @NonNull QDebug bom(){ - bom(QtJambi_LibraryUtilities.internal.nativeId(this)); + if(!disabled) + bom(QtJambi_LibraryUtilities.internal.nativeId(this)); return this; } @@ -10531,7 +10494,8 @@ class QDebug___ extends QDebug { */ @QtUninvokable public final @NonNull QDebug ws(){ - ws(QtJambi_LibraryUtilities.internal.nativeId(this)); + if(!disabled) + ws(QtJambi_LibraryUtilities.internal.nativeId(this)); return this; } @@ -10543,7 +10507,8 @@ class QDebug___ extends QDebug { */ @QtUninvokable public final @NonNull QDebug qSetFieldWidth(int width){ - setFieldWidth(QtJambi_LibraryUtilities.internal.nativeId(this), width); + if(!disabled) + setFieldWidth(QtJambi_LibraryUtilities.internal.nativeId(this), width); return this; } @@ -10555,7 +10520,8 @@ class QDebug___ extends QDebug { */ @QtUninvokable public final @NonNull QDebug qSetRealNumberPrecision(int precision){ - setRealNumberPrecision(QtJambi_LibraryUtilities.internal.nativeId(this), precision); + if(!disabled) + setRealNumberPrecision(QtJambi_LibraryUtilities.internal.nativeId(this), precision); return this; } @@ -10567,7 +10533,8 @@ class QDebug___ extends QDebug { */ @QtUninvokable public final @NonNull QDebug qSetPadChar(char ch){ - setPadChar(QtJambi_LibraryUtilities.internal.nativeId(this), ch); + if(!disabled) + setPadChar(QtJambi_LibraryUtilities.internal.nativeId(this), ch); return this; } @@ -10584,13 +10551,19 @@ public QDebug(String string) @QtUninvokable public final @NonNull QDebug append(java.lang.Object obj){ - QMetaType metaType = QList.getMetaType(obj); - debugStream(QtJambi_LibraryUtilities.internal.nativeId(this), QtJambi_LibraryUtilities.internal.checkedNativeId(metaType), obj); + if(!disabled){ + QMetaType metaType = QList.getMetaType(obj); + debugStream(QtJambi_LibraryUtilities.internal.nativeId(this), QtJambi_LibraryUtilities.internal.checkedNativeId(metaType), obj); + } return this; } @QtUninvokable private native static void debugStream(long debug, long metaType, Object value); + + @QtPropertyMember(enabled=false) + @NativeAccess + private boolean disabled; }// class class QTextStream___ extends QTextStream { @@ -11421,6 +11394,14 @@ public final boolean startsWith(String str) { return startsWith(new QByteArray(str)); } + /** + *

See QByteArray::startsWith(const char*)const

+ */ + @QtUninvokable + public final boolean startsWith(byte[] str) { + return startsWith(java.nio.ByteBuffer.wrap(str)); + } + /** *

See QByteArray::contains(const char*)const

*/ @@ -11445,6 +11426,14 @@ public final boolean endsWith(String str) { return endsWith(new QByteArray(str)); } + /** + *

See QByteArray::endsWith(const char*)const

+ */ + @QtUninvokable + public final boolean endsWith(byte[] str) { + return endsWith(java.nio.ByteBuffer.wrap(str)); + } + /** *

See QByteArray::prepend(const char*)

*/ @@ -11594,6 +11583,14 @@ public final boolean endsWith(java.nio.ByteBuffer str) { return endsWith(new QByteArrayView(str)); } + /** + *

See QByteArray::endsWith(const char*)const

+ */ + @QtUninvokable + public final boolean endsWith(QByteArray str) { + return endsWith(new QByteArrayView(str)); + } + /** *

See QByteArray::prepend(const char*)

*/ @@ -11625,6 +11622,14 @@ public final boolean startsWith(byte[] str) { public final boolean startsWith(java.nio.ByteBuffer str) { return startsWith(new QByteArrayView(str)); } + + /** + *

See QByteArray::startsWith(const char*)const

+ */ + @QtUninvokable + public final boolean startsWith(QByteArray str) { + return startsWith(new QByteArrayView(str)); + } /** *

See QByteArray::append(const char*)

@@ -11681,6 +11686,22 @@ public final int compare(byte[] b) { public final int compare(byte[] b, Qt.CaseSensitivity cs) { return compare(new QByteArrayView(b), cs); } + + /** + *

See QByteArray::compare(const char*, Qt::CaseSensitivity)const

+ */ + @QtUninvokable + public final int compare(QByteArray b) { + return compare(b, Qt.CaseSensitivity.CaseSensitive); + } + + /** + *

See QByteArray::compare(const char*, Qt::CaseSensitivity)const

+ */ + @QtUninvokable + public final int compare(QByteArray b, Qt.CaseSensitivity cs) { + return compare(new QByteArrayView(b), cs); + } /** *

See QByteArray::count(const char*)const

@@ -11690,6 +11711,14 @@ public final long count(java.nio.ByteBuffer data) { return count(new QByteArrayView(data)); } + /** + *

See QByteArray::count(const char*)const

+ */ + @QtUninvokable + public final long count(QByteArray data) { + return count(new QByteArrayView(data)); + } + /** *

See QByteArray::contains(const char*)const

*/ @@ -11697,6 +11726,14 @@ public final long count(java.nio.ByteBuffer data) { public final boolean contains(java.nio.ByteBuffer data) { return contains(new QByteArrayView(data)); } + + /** + *

See QByteArray::contains(const char*)const

+ */ + @QtUninvokable + public final boolean contains(QByteArray data) { + return contains(new QByteArrayView(data)); + } /** *

See QByteArray::compare(const char*, Qt::CaseSensitivity)const

@@ -12096,7 +12133,7 @@ public final boolean contains(java.nio.ByteBuffer a){ } /** - *

See QByteArrayView::QtUninvokable(QByteArray)const

+ *

See QByteArrayView::endsWith(QByteArray)const

*/ @QtUninvokable public final boolean endsWith(QByteArray a){ diff --git a/src/cpp/QtJambiGenerator/typesystem/qml/QtCore.qml b/src/cpp/QtJambiGenerator/typesystem/qml/QtCore.qml index e07cf107..d02d4028 100644 --- a/src/cpp/QtJambiGenerator/typesystem/qml/QtCore.qml +++ b/src/cpp/QtJambiGenerator/typesystem/qml/QtCore.qml @@ -34,12 +34,13 @@ TypeSystem{ defaultSuperClass: "QtObject" qtLibrary: "QtCore" module: "qtjambi" - description: "

QtJambi base module containing QtCore, QtGui and QtWidgets.

\n"+ - "
    \n"+ - "
  • QtCore - Core non-graphical classes used by other modules.
  • \n"+ - "
  • QtGui - Base classes for graphical user interface (GUI) components. Includes OpenGL.
  • \n"+ - "
  • QtWidgets - Classes to extend Qt GUI with C++ widgets.
  • \n"+ - "
" + description: String.raw +`

QtJambi base module containing QtCore, QtGui and QtWidgets.

+
    +
  • QtCore - Core non-graphical classes used by other modules.
  • +
  • QtGui - Base classes for graphical user interface (GUI) components. Includes OpenGL.
  • +
  • QtWidgets - Classes to extend Qt GUI with C++ widgets.
  • +
` InjectCode{ target: CodeClass.MetaInfo position: Position.Position1 @@ -63,9 +64,11 @@ TypeSystem{ packageName: "io.qt.internal" target: CodeClass.Java position: Position.Beginning - Text{content: "final static Properties properties = new Properties();\n"+ - "\n"+ - "@QtUninvokable private static native void shutdown();"} + Text{content: String.raw +`final static Properties properties = new Properties(); + +@QtUninvokable private static native void shutdown();` + } } InjectCode{ @@ -79,10 +82,13 @@ TypeSystem{ packageName: "io.qt.internal" target: CodeClass.Java position: Position.Position2 - ImportFile{ - name: ":/io/qtjambi/generator/typesystem/QtJambiCore.java" - quoteAfterLine: "class QtJambi_LibraryUtilities_2_" - quoteBeforeLine: "}// class" + Text{content: String.raw +`if(!Boolean.getBoolean("io.qt.no-library-shutdown-hook")) { + shutdownHook = RetroHelper.newShutdownThread(QtJambi_LibraryUtilities::shutdown, "QtJambi_LibraryShutdown"); + shutdownHook.setContextClassLoader(null); + Runtime.getRuntime().addShutdownHook(shutdownHook); +} +LibraryUtility.loadQtJambiLibrary();` } } @@ -90,80 +96,94 @@ TypeSystem{ packageName: "io.qt.internal" target: CodeClass.Java position: Position.Position4 - Text{content: "if(shutdownHook!=null)\n"+ - " Runtime.getRuntime().removeShutdownHook(shutdownHook);\n"+ - "LibraryUtility.clear();"} + Text{content: String.raw +`if(shutdownHook!=null) + Runtime.getRuntime().removeShutdownHook(shutdownHook); +LibraryUtility.clear();` + } } InjectCode{ target: CodeClass.ModuleInfo position: Position.End - Text{content: "requires transitive java.logging;\n"+ - "requires java.xml;\n"+ - "requires java.prefs;\n"+ - "opens io.qt.internal to qtjambi.autotests;\n"+ - "exports io.qt.internal to qtjambi.deployer, qtjambi.generator, qtjambi.autotests;\n"+ - "exports io.qt;"} + Text{content: String.raw +`requires transitive java.logging; +requires java.xml; +requires java.prefs; +opens io.qt.internal to qtjambi.autotests; +exports io.qt.internal to qtjambi.deployer, qtjambi.generator, qtjambi.autotests; +exports io.qt;` + } } Template{ name: "core.comsumer.function" - Text{content: "std::function %out;\n"+ - "if(%in){\n"+ - " JObjectWrapper wrapper(%env, %in);\n"+ - " %out = [wrapper](%TYPE value){\n"+ - " if(JniEnvironment env{200}){\n"+ - " jobject _value = qtjambi_cast(env, value);\n"+ - " Java::Runtime::Consumer::accept(env, wrapper.object(), _value);\n"+ - " }\n"+ - " };\n"+ - "}"} + Text{content: String.raw +`std::function %out; +if(%in){ + JObjectWrapper wrapper(%env, %in); + %out = [wrapper](%TYPE value){ + if(JniEnvironment env{200}){ + jobject _value = qtjambi_cast(env, value); + Java::Runtime::Consumer::accept(env, wrapper.object(), _value); + } + }; +}` + } } Template{ name: "core.runnable.function" - Text{content: "std::function %out;\n"+ - "if(%in){\n"+ - " JObjectWrapper wrapper(%env, %in);\n"+ - " %out = [wrapper](){\n"+ - " if(JniEnvironment env{200}){\n"+ - " Java::Runtime::Runnable::run(env, wrapper.object());\n"+ - " }\n"+ - " };\n"+ - "}"} + Text{content: String.raw +`std::function %out; +if(%in){ + JObjectWrapper wrapper(%env, %in); + %out = [wrapper](){ + if(JniEnvironment env{200}){ + Java::Runtime::Runnable::run(env, wrapper.object()); + } + }; +}` + } } Template{ name: "core.supplier.function" - Text{content: "std::function<%TYPE()> %out;\n"+ - "if(%in){\n"+ - " JObjectWrapper wrapper(%env, %in);\n"+ - " %out = [wrapper]() -> %TYPE {\n"+ - " if(JniEnvironment env{200}){\n"+ - " jobject value = Java::Runtime::Supplier::get(env, wrapper.object());\n"+ - " return qtjambi_cast<%TYPE>(env, value);\n"+ - " }\n"+ - " return {};\n"+ - " };\n"+ - "}"} + Text{content: String.raw +`std::function<%TYPE()> %out; +if(%in){ + JObjectWrapper wrapper(%env, %in); + %out = [wrapper]() -> %TYPE { + if(JniEnvironment env{200}){ + jobject value = Java::Runtime::Supplier::get(env, wrapper.object()); + return qtjambi_cast<%TYPE>(env, value); + } + return {}; + }; +}` + } } Template{ name: "core.self_iterator" - Text{content: "@Override\n"+ - "@QtUninvokable\n"+ - "public final java.util.Iterator<%ELEMENT_TYPE> iterator() {\n"+ - " return this;\n"+ - "}"} + Text{content: String.raw +`@Override +@QtUninvokable +public final java.util.Iterator<%ELEMENT_TYPE> iterator() { + return this; +}` + } } Template{ name: "core.to_iterator" - Text{content: "@Override\n"+ - "@QtUninvokable\n"+ - "public final %ITERATOR_TYPE iterator() {\n"+ - " return new %ITERATOR_TYPE(this);\n"+ - "}"} + Text{content: String.raw +`@Override +@QtUninvokable +public final %ITERATOR_TYPE iterator() { + return new %ITERATOR_TYPE(this); +}` + } } PrimitiveType{ @@ -7875,6 +7895,16 @@ if(destinationChild<0) } } } + InjectCode{ + target: CodeClass.Java + position: Position.Equals + until: 5 + Text{content: "if (other instanceof byte[]) {\n"+ + " other = new io.qt.core.QByteArray((byte[]) other);\n"+ + "}else if (other instanceof java.nio.ByteBuffer) {\n"+ + " other = new io.qt.core.QByteArray((java.nio.ByteBuffer) other);\n"+ + "}"} + } InjectCode{ target: CodeClass.Java position: Position.Equals @@ -7885,6 +7915,16 @@ if(destinationChild<0) " other = new io.qt.core.QByteArrayView((java.nio.ByteBuffer) other);\n"+ "}"} } + InjectCode{ + target: CodeClass.Java + position: Position.Compare + until: 5 + Text{content: "if (other instanceof byte[]) {\n"+ + " other = new io.qt.core.QByteArray((byte[]) other);\n"+ + "}else if (other instanceof java.nio.ByteBuffer) {\n"+ + " other = new io.qt.core.QByteArray((java.nio.ByteBuffer) other);\n"+ + "}"} + } InjectCode{ target: CodeClass.Java position: Position.Compare @@ -19030,6 +19070,11 @@ if(destinationChild<0) quoteBeforeLine: "}// class" } } + InjectCode{ + position: Position.Clone + Text{content: "clone.__rcDevice = this.__rcDevice;\n" + + "clone.disabled = this.disabled;"} + } ModifyFunction{ signature: "QDebug(QIODevice *)" ModifyArgument{ @@ -19043,7 +19088,8 @@ if(destinationChild<0) ModifyFunction{ signature: "QDebug(QDebug)" InjectCode{ - Text{content: "__rcDevice = o.__rcDevice;"} + Text{content: "this.__rcDevice = o.__rcDevice;\n" + + "this.disabled = o.disabled;"} } } ModifyFunction{ @@ -19051,16 +19097,21 @@ if(destinationChild<0) InjectCode{ Text{content: "Object __rcDevice = this.__rcDevice;\n"+ "this.__rcDevice = other.__rcDevice;\n"+ - "other.__rcDevice = __rcDevice;"} + "other.__rcDevice = __rcDevice;\n"+ + "boolean disabled = this.disabled;\n"+ + "this.disabled = other.disabled;\n"+ + "other.disabled = disabled;\n"} } } ModifyFunction{ signature: "operator<<(QChar)" rename: "append" + InjectCode{ Text{content: "if(disabled) return this;"} } } ModifyFunction{ signature: "operator<<(const char*)" rename: "append" + InjectCode{ Text{content: "if(disabled) return this;"} } } ModifyFunction{ signature: "operator<<(QString)" @@ -19075,43 +19126,61 @@ if(destinationChild<0) Text{content: "QString %out = qtjambi_cast(%env, %1);"} } } + InjectCode{ Text{content: "if(disabled) return this;"} } } ModifyFunction{ signature: "operator<<(bool)" rename: "append" + InjectCode{ Text{content: "if(disabled) return this;"} } } ModifyFunction{ signature: "operator<<(char)" rename: "append" + InjectCode{ Text{content: "if(disabled) return this;"} } } ModifyFunction{ signature: "operator<<(QByteArray)" rename: "append" + InjectCode{ Text{content: "if(disabled) return this;"} } } ModifyFunction{ signature: "operator<<(QByteArrayView)" rename: "append" + InjectCode{ Text{content: "if(disabled) return this;"} } since: 6 } ModifyFunction{ signature: "operator<<(double)" rename: "append" + InjectCode{ Text{content: "if(disabled) return this;"} } } ModifyFunction{ signature: "operator<<(float)" rename: "append" + InjectCode{ Text{content: "if(disabled) return this;"} } } ModifyFunction{ signature: "operator<<(qint64)" rename: "append" + InjectCode{ Text{content: "if(disabled) return this;"} } } ModifyFunction{ signature: "operator<<(signed short)" rename: "append" + InjectCode{ Text{content: "if(disabled) return this;"} } } ModifyFunction{ signature: "operator<<(signed int)" rename: "append" + InjectCode{ Text{content: "if(disabled) return this;"} } + } + ModifyFunction{ + signature: "maybeQuote(char)" + InjectCode{ Text{content: "if(disabled) return this;"} } + } + ModifyFunction{ + signature: "maybeSpace()" + InjectCode{ Text{content: "if(disabled) return this;"} } } } diff --git a/src/cpp/QtJambiGenerator/typesystem/qml/QtGui.qml b/src/cpp/QtJambiGenerator/typesystem/qml/QtGui.qml index ba84d838..a75a1eb1 100644 --- a/src/cpp/QtJambiGenerator/typesystem/qml/QtGui.qml +++ b/src/cpp/QtJambiGenerator/typesystem/qml/QtGui.qml @@ -18673,6 +18673,7 @@ TypeSystem{ name: "StyleHint" } + Rejection{functionName: "call"} Rejection{functionName: "createPlatformPixmap"} Rejection{functionName: "createPlatformWindow"} Rejection{functionName: "createForeignWindow"} @@ -18700,6 +18701,25 @@ TypeSystem{ Text{content: "@QtUninvokable\n"+ "public native static QPlatformIntegration instance();"} } + + ModifyFunction{ + signature: "themeNames() const" + ModifyArgument{ + index: 0 + ReplaceType{ + modifiedType: "io.qt.core.@NonNull QStringList" + } + } + } + ModifyFunction{ + signature: "possibleKeys(const QKeyEvent *) const" + ModifyArgument{ + index: 0 + ReplaceType{ + modifiedType: "io.qt.core.@NonNull QList" + } + } + } } Rejection{ diff --git a/src/cpp/QtJambiGenerator/typesystem/qml/QtPdf.qml b/src/cpp/QtJambiGenerator/typesystem/qml/QtPdf.qml index a6190ff1..204f5b10 100644 --- a/src/cpp/QtJambiGenerator/typesystem/qml/QtPdf.qml +++ b/src/cpp/QtJambiGenerator/typesystem/qml/QtPdf.qml @@ -215,6 +215,39 @@ TypeSystem{ } until: [6, 3] } + + ObjectType{ + name: "QPdfLinkModel" + EnumType{ + name: "Role" + } + ModifyFunction{ + signature: "setDocument(QPdfDocument *)" + ModifyArgument{ + index: 1 + ReferenceCount{ + variableName: "__rcDocument" + action: ReferenceCount.Set + } + } + } + since: [6, 6] + } + + ObjectType{ + name: "QPdfPageSelector" + ModifyFunction{ + signature: "setDocument(QPdfDocument *)" + ModifyArgument{ + index: 1 + ReferenceCount{ + variableName: "__rcDocument" + action: ReferenceCount.Set + } + } + } + since: [6, 6] + } SuppressedWarning{text: "WARNING(CppImplGenerator) :: Value type 'QPdfDestination' is missing a default constructor.*"} SuppressedWarning{text: "WARNING(CppImplGenerator) :: Value type 'QPdfSelection' is missing a default constructor.*"} diff --git a/src/cpp/QtJambiGenerator/typesystem/qml/QtTextToSpeech.qml b/src/cpp/QtJambiGenerator/typesystem/qml/QtTextToSpeech.qml index e65dbafd..e2e79d26 100644 --- a/src/cpp/QtJambiGenerator/typesystem/qml/QtTextToSpeech.qml +++ b/src/cpp/QtJambiGenerator/typesystem/qml/QtTextToSpeech.qml @@ -35,23 +35,27 @@ TypeSystem{ qtLibrary: "QtTextToSpeech" module: "qtjambi.texttospeech" description: "Provides support for accessibility features such as text-to-speech." - - EnumType{ - name: "QTextToSpeech::State" - } - - EnumType{ - name: "QTextToSpeech::BoundaryHint" - since: [6, 4] - } - - EnumType{ - name: "QTextToSpeech::ErrorReason" - since: [6, 4] - } ObjectType{ name: "QTextToSpeech" + + EnumType{ + name: "State" + } + EnumType{ + name: "BoundaryHint" + since: [6, 4] + } + + EnumType{ + name: "ErrorReason" + since: [6, 4] + } + + EnumType{ + name: "Capability" + since: [6, 6] + } ExtraIncludes{ Include{ fileName: "hashes.h" @@ -151,15 +155,15 @@ TypeSystem{ } } - EnumType{ - name: "QVoice::Age" - } - - EnumType{ - name: "QVoice::Gender" - } - ValueType{ name: "QVoice" + + EnumType{ + name: "Age" + } + + EnumType{ + name: "Gender" + } } } diff --git a/src/cpp/QtJambiGenerator/typesystem/qml_abstractobject.h b/src/cpp/QtJambiGenerator/typesystem/qml_abstractobject.h index 94059441..503a6e95 100644 --- a/src/cpp/QtJambiGenerator/typesystem/qml_abstractobject.h +++ b/src/cpp/QtJambiGenerator/typesystem/qml_abstractobject.h @@ -6,6 +6,7 @@ struct Ownership : public QObject{ Q_OBJECT QML_ELEMENT + QML_UNCREATABLE("enum carrier") public: enum Entries { Invalid, @@ -18,12 +19,13 @@ struct Ownership : public QObject{ }; Q_ENUM(Entries) Ownership() = delete; - Q_DISABLE_COPY(Ownership) + Q_DISABLE_COPY_MOVE(Ownership) }; struct Affinity : public QObject{ Q_OBJECT QML_ELEMENT + QML_UNCREATABLE("enum carrier") public: enum Entries { UI = 0x00800000, @@ -31,12 +33,13 @@ struct Affinity : public QObject{ }; Q_ENUM(Entries) Affinity() = delete; - Q_DISABLE_COPY(Affinity) + Q_DISABLE_COPY_MOVE(Affinity) }; struct CodeClass : public QObject{ Q_OBJECT QML_ELEMENT + QML_UNCREATABLE("enum carrier") public: enum Entries { NoLanguage = 0x0000, @@ -59,12 +62,13 @@ struct CodeClass : public QObject{ }; Q_ENUM(Entries) CodeClass() = delete; - Q_DISABLE_COPY(CodeClass) + Q_DISABLE_COPY_MOVE(CodeClass) }; struct RemoveFlag : public QObject{ Q_OBJECT QML_ELEMENT + QML_UNCREATABLE("enum carrier") public: enum Entries { None = CodeClass::NoLanguage, @@ -74,12 +78,13 @@ struct RemoveFlag : public QObject{ }; Q_ENUM(Entries) RemoveFlag() = delete; - Q_DISABLE_COPY(RemoveFlag) + Q_DISABLE_COPY_MOVE(RemoveFlag) }; struct Position : public QObject{ Q_OBJECT QML_ELEMENT + QML_UNCREATABLE("enum carrier") public: enum Entries { Beginning = 0, @@ -92,17 +97,19 @@ struct Position : public QObject{ Compare, HashCode, ToString, + Clone, Comment, End = 1024 }; Q_ENUM(Entries) Position() = delete; - Q_DISABLE_COPY(Position) + Q_DISABLE_COPY_MOVE(Position) }; struct Modification : public QObject{ Q_OBJECT QML_ELEMENT + QML_UNCREATABLE("enum carrier") public: enum Entries { Private = 0x01000, @@ -117,7 +124,7 @@ struct Modification : public QObject{ }; Q_ENUM(Entries) Modification() = delete; - Q_DISABLE_COPY(Modification) + Q_DISABLE_COPY_MOVE(Modification) }; Q_DECLARE_FLAGS(AccessModifications,Modification::Entries) diff --git a/src/cpp/QtJambiGenerator/typesystem/qmltypesystemreader.cpp b/src/cpp/QtJambiGenerator/typesystem/qmltypesystemreader.cpp index 9bc0959e..c9f44a0a 100644 --- a/src/cpp/QtJambiGenerator/typesystem/qmltypesystemreader.cpp +++ b/src/cpp/QtJambiGenerator/typesystem/qmltypesystemreader.cpp @@ -489,6 +489,7 @@ void QmlTypeSystemReaderPrivate::parseInjectCode(InjectCode* element, ComplexTyp {Position::Compare, CodeSnip::Compare}, {Position::HashCode, CodeSnip::HashCode}, {Position::ToString, CodeSnip::ToString}, + {Position::Clone, CodeSnip::Clone}, {Position::Comment, CodeSnip::Comment}, {Position::End, CodeSnip::End} }; @@ -535,6 +536,7 @@ void QmlTypeSystemReaderPrivate::parseInjectCode(InjectCode* element, Functional {Position::Compare, CodeSnip::Compare}, {Position::HashCode, CodeSnip::HashCode}, {Position::ToString, CodeSnip::ToString}, + {Position::Clone, CodeSnip::Clone}, {Position::Comment, CodeSnip::Comment}, {Position::End, CodeSnip::End} }; @@ -554,10 +556,11 @@ void QmlTypeSystemReaderPrivate::parseInjectCode(InjectCode* element,const QHash snip.language = languageNames[className]; snip.position = positionNames[position]; if((snip.position==CodeSnip::Equals - || snip.position==CodeSnip::Compare - || snip.position==CodeSnip::HashCode - || snip.position==CodeSnip::ToString) && snip.language!=TS::TargetLangCode){ - TypesystemException::raise(QString("Invalid position '%1' for language '%2'").arg(position).arg(className)); + || snip.position==CodeSnip::Compare + || snip.position==CodeSnip::HashCode) && snip.language!=TS::TargetLangCode){ + QMetaEnum metaEnum1 = Position::staticMetaObject.enumerator(Position::staticMetaObject.indexOfEnumerator("Entries")); + QMetaEnum metaEnum2 = CodeClass::staticMetaObject.enumerator(CodeClass::staticMetaObject.indexOfEnumerator("Entries")); + TypesystemException::raise(QString("InjectCode{position: Position.%1; target: CodeClass.%2} invalid property combination for code injection").arg(metaEnum1.valueToKey(int(position)), metaEnum2.valueToKey(int(className)))); } const QList& childrenList = element->childrenList(); diff --git a/src/cpp/QtJambiGenerator/typesystem/xmltypesystemreader.cpp b/src/cpp/QtJambiGenerator/typesystem/xmltypesystemreader.cpp index c7c8c5ff..abae7bed 100644 --- a/src/cpp/QtJambiGenerator/typesystem/xmltypesystemreader.cpp +++ b/src/cpp/QtJambiGenerator/typesystem/xmltypesystemreader.cpp @@ -851,8 +851,7 @@ void XmlTypeSystemReaderPrivate::parseInjectCode(const QDomElement &element,cons snip.position = positionNames[position]; if((snip.position==CodeSnip::Equals || snip.position==CodeSnip::Compare - || snip.position==CodeSnip::HashCode - || snip.position==CodeSnip::ToString) && snip.language!=TS::TargetLangCode){ + || snip.position==CodeSnip::HashCode) && snip.language!=TS::TargetLangCode){ TypesystemException::raise(QString("Invalid position '%1' for language '%2' of tag <%3> in line %4").arg(position).arg(className).arg(element.localName()).arg(element.lineNumber())); } diff --git a/src/java/ant/io/qt/tools/ant/InitializeBuildTask.java b/src/java/ant/io/qt/tools/ant/InitializeBuildTask.java index 8f654dc0..43659a6f 100644 --- a/src/java/ant/io/qt/tools/ant/InitializeBuildTask.java +++ b/src/java/ant/io/qt/tools/ant/InitializeBuildTask.java @@ -1148,7 +1148,7 @@ else if (Constants.CONFIG_TEST.equals(getConfiguration())) throw new BuildException("ERROR: " + Constants.GENERATOR_INCLUDEPATHS + " property is not configured, please ensure you read and edit build.properties"); - mySetProperty(-1, "TODAY", null, new SimpleDateFormat("yyyy-MM-dd").format(new Date()), true); + mySetProperty(-1, "TODAY", null, new SimpleDateFormat("yyyy-MM-dd").format(new Date()), false); java.io.File buildDir = new java.io.File(new java.io.File(qtjambiFullVersion), "build"); mySetProperty(-1, "outputDir", null, buildDir.getAbsolutePath(), true); diff --git a/src/java/modules/qtjambi/Qt5/io/qt/core/QLinkedList.java b/src/java/modules/qtjambi/Qt5/io/qt/core/QLinkedList.java index e05a140c..143874fc 100644 --- a/src/java/modules/qtjambi/Qt5/io/qt/core/QLinkedList.java +++ b/src/java/modules/qtjambi/Qt5/io/qt/core/QLinkedList.java @@ -48,6 +48,10 @@ public class QLinkedList extends io.qt.internal.AbstractSequentialContainernull. + */ @NativeAccess protected QLinkedList(QPrivateConstructor p) { super(p); @@ -60,32 +64,23 @@ public QLinkedList(QMetaType.Type metaType) { public QLinkedList(Class elementType) { super(null); QMetaType metaType = QMetaType.fromType(elementType); - if(metaType.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be type of QLinkedList."); - if(metaType.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be type of QLinkedList."); initialize(elementType, QtJambi_LibraryUtilities.internal.nativeId(metaType), null); } public QLinkedList(QMetaType metaType) { super(null); - if(metaType.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be type of QLinkedList."); - if(metaType.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be type of QLinkedList."); initialize(metaType.javaType(), QtJambi_LibraryUtilities.internal.nativeId(metaType), null); } public QLinkedList(Collection other) { super(null); QMetaType metaType = QList.findElementMetaType(Objects.requireNonNull(other)); - if(metaType==null || metaType.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be type of QLinkedList."); - if(metaType.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be type of QLinkedList."); initialize(metaType.javaType(), QtJambi_LibraryUtilities.internal.nativeId(metaType), other); } + /** + * Creating a container of type QVariant. + */ public static QLinkedList createVariantLinkedList(){ return new QLinkedList<>(new QMetaType(QMetaType.Type.QVariant)); } @@ -93,13 +88,16 @@ public static QLinkedList createVariantLinkedList(){ @QtUninvokable private native void initialize(Class elementType, long elementMetaType, Collection other); + /** + * Creates and returns a copy of this object. + */ @Override public QLinkedList clone(){ return new QLinkedList<>(this); } @QtUninvokable - public final void append(T t) { + public final void append(T t) { try { append(QtJambi_LibraryUtilities.internal.nativeId(this), t); }catch(QNoNativeResourcesException e) { @@ -112,14 +110,14 @@ public final void append(T t) { private static native void append(long __this__nativeId, T t); @QtUninvokable - public final void clear() { + public final void clear() { clear(QtJambi_LibraryUtilities.internal.nativeId(this)); } @QtUninvokable private static native void clear(long __this__nativeId); @QtUninvokable - public final boolean contains(Object t) { + public final boolean contains(Object t) { try{ return contains(QtJambi_LibraryUtilities.internal.nativeId(this), t); }catch(QNoNativeResourcesException e) { @@ -137,12 +135,12 @@ public final boolean contains(Object t) { private static native boolean contains(long __this__nativeId, T t); @QtUninvokable - public final int count() { + public final int count() { return size(); } @QtUninvokable - public final int count(T t) { + public final int count(T t) { try{ return count(QtJambi_LibraryUtilities.internal.nativeId(this), t); }catch(QNoNativeResourcesException e) { @@ -155,35 +153,35 @@ public final int count(T t) { private static native int count(long __this__nativeId, T t); @QtUninvokable - protected final QSequentialIterator begin() { + protected final QSequentialIterator begin() { return begin(QtJambi_LibraryUtilities.internal.nativeId(this)); } @QtUninvokable private static native QSequentialIterator begin(long __this__nativeId); @QtUninvokable - protected final QSequentialIterator end() { + protected final QSequentialIterator end() { return end(QtJambi_LibraryUtilities.internal.nativeId(this)); } @QtUninvokable private static native QSequentialIterator end(long __this__nativeId); @QtUninvokable - protected final QSequentialConstIterator constBegin() { + protected final QSequentialConstIterator constBegin() { return constBegin(QtJambi_LibraryUtilities.internal.nativeId(this)); } @QtUninvokable private static native QSequentialConstIterator constBegin(long __this__nativeId); @QtUninvokable - protected final QSequentialConstIterator constEnd() { + protected final QSequentialConstIterator constEnd() { return constEnd(QtJambi_LibraryUtilities.internal.nativeId(this)); } @QtUninvokable private static native QSequentialConstIterator constEnd(long __this__nativeId); @QtUninvokable - public final boolean endsWith(T t) { + public final boolean endsWith(T t) { try{ return endsWith(QtJambi_LibraryUtilities.internal.nativeId(this), t); }catch(QNoNativeResourcesException e) { @@ -196,37 +194,41 @@ public final boolean endsWith(T t) { private static native boolean endsWith(long __this__nativeId, T t); @QtUninvokable - public final T first() { - if(size()==0) + public final T first() { + try{ + return first(QtJambi_LibraryUtilities.internal.nativeId(this)); + } catch (IndexOutOfBoundsException e) { throw new NoSuchElementException(); - return first(QtJambi_LibraryUtilities.internal.nativeId(this)); + } } @QtUninvokable private static native T first(long __this__nativeId); @QtUninvokable - public final boolean isEmpty() { + public final boolean isEmpty() { return size()==0; } @QtUninvokable - public final T last() { - if(size()==0) + public final T last() { + try{ + return last(QtJambi_LibraryUtilities.internal.nativeId(this)); + } catch (IndexOutOfBoundsException e) { throw new NoSuchElementException(); - return last(QtJambi_LibraryUtilities.internal.nativeId(this)); + } } @QtUninvokable private static native T last(long __this__nativeId); @QtUninvokable - private final boolean operator_equal(java.util.Collection l) { + private final boolean operator_equal(java.util.Collection l) { return operator_equal(QtJambi_LibraryUtilities.internal.nativeId(this), l); } @QtUninvokable private static native boolean operator_equal(long __this__nativeId, java.util.Collection l); @QtUninvokable - public final void prepend(T t) { + public final void prepend(T t) { try{ prepend(QtJambi_LibraryUtilities.internal.nativeId(this), t); }catch(QNoNativeResourcesException e) { @@ -239,7 +241,7 @@ public final void prepend(T t) { private static native void prepend(long __this__nativeId, T t); @QtUninvokable - public final int removeAll(T t) { + public final int removeAll(T t) { try { return removeAll(QtJambi_LibraryUtilities.internal.nativeId(this), t); }catch(QNoNativeResourcesException e) { @@ -257,7 +259,7 @@ public final int removeAll(T t) { private static native int removeAll(long __this__nativeId, T t); @QtUninvokable - public final T removeFirst() { + public final T removeFirst() { T value = first(); removeFirst(QtJambi_LibraryUtilities.internal.nativeId(this)); return value; @@ -266,7 +268,7 @@ public final T removeFirst() { private static native void removeFirst(long __this__nativeId); @QtUninvokable - public final T removeLast() { + public final T removeLast() { T value = last(); removeLast(QtJambi_LibraryUtilities.internal.nativeId(this)); return value; @@ -275,7 +277,7 @@ public final T removeLast() { private static native void removeLast(long __this__nativeId); @QtUninvokable - public final boolean removeOne(T t) { + public final boolean removeOne(T t) { try{ return removeOne(QtJambi_LibraryUtilities.internal.nativeId(this), t); }catch(QNoNativeResourcesException e) { @@ -293,14 +295,14 @@ public final boolean removeOne(T t) { private static native boolean removeOne(long __this__nativeId, T t); @QtUninvokable - public final int size() { + public final int size() { return size(QtJambi_LibraryUtilities.internal.nativeId(this)); } @QtUninvokable private static native int size(long __this__nativeId); @QtUninvokable - public final boolean startsWith(T t) { + public final boolean startsWith(T t) { try{ return startsWith(QtJambi_LibraryUtilities.internal.nativeId(this), t); }catch(QNoNativeResourcesException e) { @@ -313,14 +315,14 @@ public final boolean startsWith(T t) { private static native boolean startsWith(long __this__nativeId, T t); @QtUninvokable - public final T takeFirst() { + public final T takeFirst() { return takeFirst(QtJambi_LibraryUtilities.internal.nativeId(this)); } @QtUninvokable private static native T takeFirst(long __this__nativeId); @QtUninvokable - public final T takeLast() { + public final T takeLast() { return takeLast(QtJambi_LibraryUtilities.internal.nativeId(this)); } @QtUninvokable @@ -545,10 +547,6 @@ public final java.util.Iterator descendingIterator() { @SafeVarargs public static QLinkedList of(T element0, T...elements) { QMetaType metaType = QList.findElementMetaType(element0, elements); - if(metaType==null || metaType.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be type of QLinkedList."); - if(metaType.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be type of QLinkedList."); QLinkedList result = new QLinkedList<>(metaType); result.add(element0); for (T t : elements) { diff --git a/src/java/modules/qtjambi/Qt5/io/qt/core/QList.java b/src/java/modules/qtjambi/Qt5/io/qt/core/QList.java index d9c15a4c..c385e639 100644 --- a/src/java/modules/qtjambi/Qt5/io/qt/core/QList.java +++ b/src/java/modules/qtjambi/Qt5/io/qt/core/QList.java @@ -30,6 +30,7 @@ package io.qt.core; import java.util.Collection; +import java.util.NoSuchElementException; import java.util.Objects; import io.qt.QNoNativeResourcesException; @@ -46,44 +47,59 @@ public class QList extends io.qt.internal.AbstractList implements Cloneabl QtJambi_LibraryUtilities.initialize(); } + /** + * Constructor for internal use only. + * @param p expected to be null. + */ @NativeAccess protected QList(QPrivateConstructor p) { super(p); } + /** + * Creating a container with given element type. + *

See QList::QList()

+ * @param metaType the type T + */ public QList(QMetaType.Type metaType) { this(new QMetaType(metaType)); } + /** + * Creating a container with given element type. + *

See QList::QList()

+ * @param elementType the type T + */ public QList(Class elementType) { super(null); QMetaType metaType = QMetaType.fromType(elementType); - if(metaType.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be type of QList."); - if(metaType.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be type of QList."); initialize(elementType, QtJambi_LibraryUtilities.internal.nativeId(metaType), null); } + /** + * Creating a container with given element type. + *

See QList::QList()

+ * @param metaType the type T + */ public QList(QMetaType metaType) { super(null); - if(metaType.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be type of QList."); - if(metaType.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be type of QList."); initialize(metaType.javaType(), QtJambi_LibraryUtilities.internal.nativeId(metaType), null); } + /** + * Creating a container with given content. + *

See QList::QList(const QList<T> &)

+ * @param other container + */ public QList(Collection other) { super(null); QMetaType metaType = findElementMetaType(Objects.requireNonNull(other)); - if(metaType==null || metaType.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be type of QList."); - if(metaType.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be type of QList."); initialize(metaType.javaType(), QtJambi_LibraryUtilities.internal.nativeId(metaType), other); } + /** + * Creating a container of type QVariant. + */ public static QList createVariantList(){ return new QList<>(new QMetaType(QMetaType.Type.QVariant)); } @@ -91,6 +107,10 @@ public static QList createVariantList(){ @QtUninvokable private native void initialize(Class elementType, long elementMetaType, Collection other); + /** + * Creates and returns a copy of this object. + *

See QList::QList(const QList<T> &)

+ */ @Override public QList clone(){ return new QList<>(this); @@ -106,21 +126,19 @@ public final void append(java.util.Collection t) { @QtUninvokable public final void append(T t) { try { - final long nativeId = QtJambi_LibraryUtilities.internal.nativeId(this); - int size = size(nativeId); - insert(nativeId, size, 1, t); + append(QtJambi_LibraryUtilities.internal.nativeId(this), t); }catch(QNoNativeResourcesException e) { throw e; }catch(RuntimeException e) { throw QSet.handleException(e, elementMetaType(), t); } } + + @QtUninvokable + private static native void append(long __this__nativeId, T t); @QtUninvokable public final T at(int i) { - if (i >= size() || i < 0) { - throw new IndexOutOfBoundsException(String.format("Accessing container of size %1$s at %2$s", size(), i)); - } return at(QtJambi_LibraryUtilities.internal.nativeId(this), i); } @QtUninvokable @@ -212,7 +230,11 @@ public final boolean endsWith(T t) { @QtUninvokable public final T first() { - return at(0); + try{ + return at(0); + } catch (IndexOutOfBoundsException e) { + throw new NoSuchElementException(); + } } @QtUninvokable @@ -236,12 +258,7 @@ public final int indexOf(T t, int from) { @QtUninvokable public final void insert(int i, T t) { try { - final long nativeId = QtJambi_LibraryUtilities.internal.nativeId(this); - int size = size(nativeId); - if (i > size || i < 0) { - throw new IndexOutOfBoundsException(String.format("Accessing container of size %1$s at %2$s", size, i)); - } - insert(nativeId, i, 1, t); + insert(QtJambi_LibraryUtilities.internal.nativeId(this), i, 1, t); }catch(IndexOutOfBoundsException | QNoNativeResourcesException e) { throw e; }catch(RuntimeException e) { @@ -257,9 +274,15 @@ public final boolean isEmpty() { } @QtUninvokable - public final T last() { - return at(size()-1); + public final T last() { + try{ + return last(QtJambi_LibraryUtilities.internal.nativeId(this)); + } catch (IndexOutOfBoundsException e) { + throw new NoSuchElementException(); + } } + @QtUninvokable + private static native T last(long __this__nativeId); @SuppressWarnings("unchecked") @QtUninvokable @@ -286,7 +309,7 @@ public final int lastIndexOf(T t, int from) { private static native int lastIndexOf(long __this__nativeId, T t, int from); @QtUninvokable - public final int length() { + public final int length() { return size(); } @@ -295,40 +318,28 @@ public final QList mid(int pos) { return mid(pos, (int)-1); } @QtUninvokable - public final QList mid(int pos, int length) { - if (pos >= size() || pos < 0) { - throw new IndexOutOfBoundsException(String.format("Accessing container of size %1$s at %2$s", size(), pos)); - } - if (length>=0 && pos+length > size()) { - throw new IndexOutOfBoundsException(String.format("Accessing container of size %1$s from %2$s to %3$s", size(), pos, pos+length)); - } + public final QList mid(int pos, int length) { return mid(QtJambi_LibraryUtilities.internal.nativeId(this), pos, length); } @QtUninvokable private static native QList mid(long __this__nativeId, int pos, int length); @QtUninvokable - public final void move(int from, int to) { - if (from >= size() || from < 0) { - throw new IndexOutOfBoundsException(String.format("Accessing container of size %1$s at %2$s", size(), from)); - } - if (to >= size() || to < 0) { - throw new IndexOutOfBoundsException(String.format("Accessing container of size %1$s at %2$s", size(), to)); - } + public final void move(int from, int to) { move(QtJambi_LibraryUtilities.internal.nativeId(this), from, to); } @QtUninvokable private static native void move(long __this__nativeId, int from, int to); @QtUninvokable - private final boolean operator_equal(java.util.Collection l) { + private final boolean operator_equal(java.util.Collection l) { return operator_equal(QtJambi_LibraryUtilities.internal.nativeId(this), l); } @QtUninvokable private static native boolean operator_equal(long __this__nativeId, java.util.Collection l); @QtUninvokable - public final void prepend(T t) { + public final void prepend(T t) { try { insert(QtJambi_LibraryUtilities.internal.nativeId(this), 0, 1, t); }catch(QNoNativeResourcesException e) { @@ -339,7 +350,7 @@ public final void prepend(T t) { } @QtUninvokable - public final int removeAll(T t) { + public final int removeAll(T t) { try { return removeAll(QtJambi_LibraryUtilities.internal.nativeId(this), t); }catch(QNoNativeResourcesException e) { @@ -357,34 +368,24 @@ public final int removeAll(T t) { private static native int removeAll(long __this__nativeId, T t); @QtUninvokable - public final void removeAt(int i) { - final long nativeId = QtJambi_LibraryUtilities.internal.nativeId(this); - int size = size(nativeId); - if (i >= size || i < 0) { - throw new IndexOutOfBoundsException(String.format("Accessing container of size %1$s at %2$s", size, i)); - } + public final void removeAt(int i) { remove(QtJambi_LibraryUtilities.internal.nativeId(this), i, 1); } @QtUninvokable - public final void removeFirst() { - removeAt(0); + public final void removeFirst() { + takeFirst(); } @QtUninvokable - public final void removeLast() { - removeAt(size()-1); + public final void removeLast() { + takeLast(); } @QtUninvokable - public final boolean removeOne(T t) { + public final boolean removeOne(T t) { try { - final long nativeId = QtJambi_LibraryUtilities.internal.nativeId(this); - int idx = indexOf(nativeId, t, 0); - if(idx>=0) { - remove(nativeId, idx, 1); - return true; - } + return removeOne(QtJambi_LibraryUtilities.internal.nativeId(this), t); }catch(QNoNativeResourcesException e) { throw e; }catch(IllegalArgumentException e) { @@ -395,14 +396,14 @@ public final boolean removeOne(T t) { } return false; } + @QtUninvokable + private static native boolean removeOne(long __this__nativeId, T t); + @QtUninvokable private static native void remove(long __this__nativeId, int i, int n); @QtUninvokable - public final void replace(int i, T t) { - if (i >= size() || i < 0) { - throw new IndexOutOfBoundsException(String.format("Accessing container of size %1$s at %2$s", size(), i)); - } + public final void replace(int i, T t) { try { replace(QtJambi_LibraryUtilities.internal.nativeId(this), i, t); }catch(QNoNativeResourcesException e) { @@ -415,21 +416,21 @@ public final void replace(int i, T t) { private static native void replace(long __this__nativeId, int i, T t); @QtUninvokable - public final void reserve(int size) { + public final void reserve(int size) { reserve(QtJambi_LibraryUtilities.internal.nativeId(this), size); } @QtUninvokable private static native void reserve(long __this__nativeId, int size); @QtUninvokable - public final int size() { + public final int size() { return size(QtJambi_LibraryUtilities.internal.nativeId(this)); } @QtUninvokable private static native int size(long __this__nativeId); @QtUninvokable - public final boolean startsWith(T t) { + public final boolean startsWith(T t) { try{ return startsWith(QtJambi_LibraryUtilities.internal.nativeId(this), t); }catch(QNoNativeResourcesException e) { @@ -442,31 +443,41 @@ public final boolean startsWith(T t) { private static native boolean startsWith(long __this__nativeId, T t); @QtUninvokable - public final T takeAt(int i) { - T result = at(i); - removeAt(i); - return result; + public final T takeAt(int i) { + return takeAt(QtJambi_LibraryUtilities.internal.nativeId(this), i); } + @QtUninvokable + private static native T takeAt(long __this__nativeId, int i); @QtUninvokable - public final T takeFirst() { - return takeAt(0); + public final T takeFirst() { + try{ + return takeAt(0); + } catch (IndexOutOfBoundsException e) { + throw new NoSuchElementException(); + } } @QtUninvokable - public final T takeLast() { - return takeAt(size()-1); + public final T takeLast() { + try{ + return takeLast(QtJambi_LibraryUtilities.internal.nativeId(this)); + } catch (IndexOutOfBoundsException e) { + throw new NoSuchElementException(); + } } + @QtUninvokable + private static native T takeLast(long __this__nativeId); @QtUninvokable - public final T value(int i) { + public final T value(int i) { return value(QtJambi_LibraryUtilities.internal.nativeId(this), i); } @QtUninvokable private static native T value(long __this__nativeId, int i); @QtUninvokable - public final T value(int i, T defaultValue) { + public final T value(int i, T defaultValue) { try { return valueDefault(QtJambi_LibraryUtilities.internal.nativeId(this), i, defaultValue); }catch(QNoNativeResourcesException e) { @@ -531,7 +542,7 @@ public void add(int index, T e){ @QtUninvokable public T set(int index, T e){ if(e!=null){ - T el = get(index); + T el = at(index); replace(index, e); return el; } else return null; @@ -558,14 +569,7 @@ public T get(int index) { } @QtUninvokable - public final void swapItemsAt(int i, int j) { - int size = size(); - if (i >= size || i < 0) { - throw new IndexOutOfBoundsException(String.format("Accessing container of size %1$s at %2$s", size, i)); - } - if (j >= size || j < 0) { - throw new IndexOutOfBoundsException(String.format("Accessing container of size %1$s at %2$s", size, j)); - } + public final void swapItemsAt(int i, int j) { swapItemsAt(QtJambi_LibraryUtilities.internal.nativeId(this), i, j); } @@ -579,7 +583,7 @@ protected final void removeAtIndex(int cursor) { } @QtUninvokable - public final QSet toSet() { + public final QSet toSet() { QSet set = new QSet<>(elementMetaType()); set.unite(this); return set; @@ -622,10 +626,6 @@ QMetaType elementMetaType() { @SafeVarargs public static QList of(T element0, T...elements) { QMetaType metaType = findElementMetaType(element0, elements); - if(metaType==null || metaType.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be type of QList."); - if(metaType.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be type of QList."); QList result; if(metaType.id()==QMetaType.Type.QString.value()) result = (QList)(QList)new QStringList(); diff --git a/src/java/modules/qtjambi/Qt5/io/qt/core/QVector.java b/src/java/modules/qtjambi/Qt5/io/qt/core/QVector.java index 8c8cd9eb..c921e381 100644 --- a/src/java/modules/qtjambi/Qt5/io/qt/core/QVector.java +++ b/src/java/modules/qtjambi/Qt5/io/qt/core/QVector.java @@ -47,6 +47,10 @@ public class QVector extends io.qt.internal.AbstractList implements Clonea QtJambi_LibraryUtilities.initialize(); } + /** + * Constructor for internal use only. + * @param p expected to be null. + */ @NativeAccess protected QVector(QPrivateConstructor p) { super(p); @@ -59,32 +63,23 @@ public QVector(QMetaType.Type metaType) { public QVector(Class elementType) { super(null); QMetaType metaType = QMetaType.fromType(elementType); - if(metaType.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be type of QVector."); - if(metaType.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be type of QVector."); initialize(elementType, QtJambi_LibraryUtilities.internal.nativeId(metaType), null); } public QVector(QMetaType metaType) { super(null); - if(metaType.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be type of QVector."); - if(metaType.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be type of QVector."); initialize(metaType.javaType(), QtJambi_LibraryUtilities.internal.nativeId(metaType), null); } public QVector(Collection other) { super(null); QMetaType metaType = QList.findElementMetaType(Objects.requireNonNull(other)); - if(metaType==null || metaType.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be type of QVector."); - if(metaType.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be type of QVector."); initialize(metaType.javaType(), QtJambi_LibraryUtilities.internal.nativeId(metaType), other); } + /** + * Creating a container of type QVariant. + */ public static QVector createVariantVector(){ return new QVector<>(new QMetaType(QMetaType.Type.QVariant)); } @@ -92,6 +87,9 @@ public static QVector createVariantVector(){ @QtUninvokable private native void initialize(Class elementType, long elementMetaType, Collection other); + /** + * Creates and returns a copy of this object. + */ @Override public QVector clone(){ return new QVector<>(this); @@ -110,21 +108,19 @@ public final void append(java.util.Collection t) { @QtUninvokable public final void append(T t) { try { - final long nativeId = QtJambi_LibraryUtilities.internal.nativeId(this); - int size = size(nativeId); - insert(nativeId, size, 1, t); + append(QtJambi_LibraryUtilities.internal.nativeId(this), t); }catch(QNoNativeResourcesException e) { throw e; }catch(RuntimeException e) { throw QSet.handleException(e, elementMetaType(), t); } } + + @QtUninvokable + private static native void append(long __this__nativeId, T t); @QtUninvokable public final T at(int i) { - if (i >= size() || i < 0) { - throw new IndexOutOfBoundsException(String.format("Accessing container of size %1$s at %2$s", size(), i)); - } return at(QtJambi_LibraryUtilities.internal.nativeId(this), i); } @QtUninvokable @@ -240,7 +236,11 @@ public final void fill(T t, int size) { @QtUninvokable public final T first() { - return at(0); + try{ + return at(0); + } catch (IndexOutOfBoundsException e) { + throw new NoSuchElementException(); + } } @QtUninvokable @@ -268,9 +268,6 @@ public final void insert(int i, T t) { @QtUninvokable public final void insert(int i, int n, T t) { - if (i > size() || i < 0) { - throw new IndexOutOfBoundsException(String.format("Accessing container of size %1$s at %2$s", size(), i)); - } try { insert(QtJambi_LibraryUtilities.internal.nativeId(this), i, n, t); }catch(QNoNativeResourcesException e) { @@ -288,9 +285,15 @@ public final boolean isEmpty() { } @QtUninvokable - public final T last() { - return at(size()-1); + public final T last() { + try{ + return last(QtJambi_LibraryUtilities.internal.nativeId(this)); + } catch (IndexOutOfBoundsException e) { + throw new NoSuchElementException(); + } } + @QtUninvokable + private static native T last(long __this__nativeId); @SuppressWarnings("unchecked") @QtUninvokable @@ -338,12 +341,6 @@ public final QVector mid(int pos) { } @QtUninvokable public final QVector mid(int pos, int length) { - if (pos >= size() || pos < 0) { - throw new IndexOutOfBoundsException(String.format("Accessing container of size %1$s at %2$s", size(), pos)); - } - if (length>=0 && pos+length > size()) { - throw new IndexOutOfBoundsException(String.format("Accessing container of size %1$s from %2$s to %3$s", size(), pos, pos+length)); - } return mid(QtJambi_LibraryUtilities.internal.nativeId(this), pos, length); } @QtUninvokable @@ -351,26 +348,20 @@ public final QVector mid(int pos, int length) { @QtUninvokable public final void move(int from, int to) { - if (from >= size() || from < 0) { - throw new IndexOutOfBoundsException(String.format("Accessing container of size %1$s at %2$s", size(), from)); - } - if (to >= size() || to < 0) { - throw new IndexOutOfBoundsException(String.format("Accessing container of size %1$s at %2$s", size(), to)); - } move(QtJambi_LibraryUtilities.internal.nativeId(this), from, to); } @QtUninvokable private static native void move(long __this__nativeId, int from, int to); @QtUninvokable - private final boolean operator_equal(java.util.Collection l) { + private final boolean operator_equal(java.util.Collection l) { return operator_equal(QtJambi_LibraryUtilities.internal.nativeId(this), l); } @QtUninvokable private static native boolean operator_equal(long __this__nativeId, java.util.Collection l); @QtUninvokable - public final void prepend(T t) { + public final void prepend(T t) { try { insert(QtJambi_LibraryUtilities.internal.nativeId(this), 0, 1, t); }catch(QNoNativeResourcesException e) { @@ -381,17 +372,14 @@ public final void prepend(T t) { } @QtUninvokable - public final void remove(int i, int n) { - if (i+n > size() || i < 0) { - throw new IndexOutOfBoundsException(String.format("Accessing container of size %1$s at %2$s", size(), i+n)); - } + public final void remove(int i, int n) { remove(QtJambi_LibraryUtilities.internal.nativeId(this), i, n); } @QtUninvokable private static native void remove(long __this__nativeId, int i, int n); @QtUninvokable - public final int removeAll(T t) { + public final int removeAll(T t) { try { return removeAll(QtJambi_LibraryUtilities.internal.nativeId(this), t); }catch(QNoNativeResourcesException e) { @@ -409,42 +397,24 @@ public final int removeAll(T t) { private static native int removeAll(long __this__nativeId, T t); @QtUninvokable - public final void removeAt(int i) { - final long nativeId = QtJambi_LibraryUtilities.internal.nativeId(this); - int size = size(nativeId); - if (i >= size || i < 0) { - throw new IndexOutOfBoundsException(String.format("Accessing container of size %1$s at %2$s", size, i)); - } - remove(QtJambi_LibraryUtilities.internal.nativeId(this), i, 1); + public final void removeAt(int i) { + remove(i, 1); } @QtUninvokable - public final T removeFirst() { - if(size()==0) - throw new NoSuchElementException(); - T e = at(0); - removeAt(0); - return e; + public final T removeFirst() { + return takeFirst(); } @QtUninvokable - public final T removeLast() { - if(size()==0) - throw new NoSuchElementException(); - T e = at(size()-1); - removeAt(size()-1); - return e; + public final T removeLast() { + return takeLast(); } @QtUninvokable - public final boolean removeOne(T t) { + public final boolean removeOne(T t) { try { - final long nativeId = QtJambi_LibraryUtilities.internal.nativeId(this); - int idx = indexOf(nativeId, t, 0); - if(idx>=0) { - remove(nativeId, idx, 1); - return true; - } + return removeOne(QtJambi_LibraryUtilities.internal.nativeId(this), t); }catch(QNoNativeResourcesException e) { throw e; }catch(IllegalArgumentException e) { @@ -455,12 +425,11 @@ public final boolean removeOne(T t) { } return false; } + @QtUninvokable + private static native boolean removeOne(long __this__nativeId, T t); @QtUninvokable - public final void replace(int i, T t) { - if (i >= size() || i < 0) { - throw new IndexOutOfBoundsException(String.format("Accessing container of size %1$s at %2$s", size(), i)); - } + public final void replace(int i, T t) { try { replace(QtJambi_LibraryUtilities.internal.nativeId(this), i, t); }catch(QNoNativeResourcesException e) { @@ -473,35 +442,35 @@ public final void replace(int i, T t) { private static native void replace(long __this__nativeId, int i, T t); @QtUninvokable - public final void reserve(int size) { + public final void reserve(int size) { reserve(QtJambi_LibraryUtilities.internal.nativeId(this), size); } @QtUninvokable private static native void reserve(long __this__nativeId, int size); @QtUninvokable - public final void resize(int size) { + public final void resize(int size) { resize(QtJambi_LibraryUtilities.internal.nativeId(this), size); } @QtUninvokable private static native void resize(long __this__nativeId, int size); @QtUninvokable - public final void squeeze() { + public final void squeeze() { squeeze(QtJambi_LibraryUtilities.internal.nativeId(this)); } @QtUninvokable private static native void squeeze(long __this__nativeId); @QtUninvokable - public final int size() { + public final int size() { return size(QtJambi_LibraryUtilities.internal.nativeId(this)); } @QtUninvokable private static native int size(long __this__nativeId); @QtUninvokable - public final boolean startsWith(T t) { + public final boolean startsWith(T t) { try{ return startsWith(QtJambi_LibraryUtilities.internal.nativeId(this), t); }catch(QNoNativeResourcesException e) { @@ -514,38 +483,48 @@ public final boolean startsWith(T t) { private static native boolean startsWith(long __this__nativeId, T t); @QtUninvokable - public final T takeAt(int i) { - T result = at(i); - removeAt(i); - return result; + public final T takeAt(int i) { + return takeAt(QtJambi_LibraryUtilities.internal.nativeId(this), i); } + @QtUninvokable + private static native T takeAt(long __this__nativeId, int i); @QtUninvokable - public final T takeFirst() { - return takeAt(0); + public final T takeFirst() { + try{ + return takeAt(0); + } catch (IndexOutOfBoundsException e) { + throw new NoSuchElementException(); + } } @QtUninvokable - public final T takeLast() { - return takeAt(size()-1); + public final T takeLast() { + try{ + return takeLast(QtJambi_LibraryUtilities.internal.nativeId(this)); + } catch (IndexOutOfBoundsException e) { + throw new NoSuchElementException(); + } } + @QtUninvokable + private static native T takeLast(long __this__nativeId); @QtUninvokable - public final QSet toSet() { + public final QSet toSet() { QSet set = new QSet<>(elementMetaType()); set.unite(this); return set; } @QtUninvokable - public final T value(int i) { + public final T value(int i) { return value(QtJambi_LibraryUtilities.internal.nativeId(this), i); } @QtUninvokable private static native T value(long __this__nativeId, int i); @QtUninvokable - public final T value(int i, T defaultValue) { + public final T value(int i, T defaultValue) { try { return valueDefault(QtJambi_LibraryUtilities.internal.nativeId(this), i, defaultValue); }catch(QNoNativeResourcesException e) { @@ -609,7 +588,7 @@ public void add(int index, T e){ @QtUninvokable public T set(int index, T e){ if(e!=null){ - T el = get(index); + T el = at(index); replace(index, e); return el; } else return null; @@ -635,6 +614,14 @@ public T get(int index) { return at(index); } + @QtUninvokable + public final void swapItemsAt(int i, int j) { + swapItemsAt(QtJambi_LibraryUtilities.internal.nativeId(this), i, j); + } + + @QtUninvokable + private static native void swapItemsAt(long __this__nativeId, int i, int j); + @Override @QtUninvokable protected final void removeAtIndex(int cursor) { @@ -676,10 +663,6 @@ QMetaType elementMetaType() { @SafeVarargs public static QVector of(T element0, T...elements) { QMetaType metaType = QList.findElementMetaType(element0, elements); - if(metaType==null || metaType.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be type of QVector."); - if(metaType.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be type of QVector."); QVector result = new QVector<>(metaType); result.add(element0); for (T t : elements) { diff --git a/src/java/modules/qtjambi/Qt6/io/qt/core/QList.java b/src/java/modules/qtjambi/Qt6/io/qt/core/QList.java index cf33eed1..04830625 100644 --- a/src/java/modules/qtjambi/Qt6/io/qt/core/QList.java +++ b/src/java/modules/qtjambi/Qt6/io/qt/core/QList.java @@ -48,41 +48,53 @@ public class QList extends io.qt.internal.AbstractList implements Cloneabl QtJambi_LibraryUtilities.initialize(); } + /** + * Constructor for internal use only. + * @param p expected to be null. + */ @NativeAccess protected QList(QPrivateConstructor p) { super(p); } + /** + * Creating a container with given element type. + *

See QList::QList()

+ * @param metaType the type T + */ public QList(QMetaType.Type metaType) { this(new QMetaType(metaType)); } + /** + * Creating a container with given element type. + *

See QList::QList()

+ * @param elementType the type T + */ public QList(Class elementType) { super(null); QMetaType metaType = QMetaType.fromType(elementType); - if(metaType.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be type of QList."); - if(metaType.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be type of QList."); initialize(elementType, QtJambi_LibraryUtilities.internal.nativeId(metaType), null); } + /** + * Creating a container with given element type. + *

See QList::QList()

+ * @param metaType the type T + */ public QList(QMetaType metaType) { super(null); - if(metaType.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be type of QList."); - if(metaType.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be type of QList."); initialize(metaType.javaType(), QtJambi_LibraryUtilities.internal.nativeId(metaType), null); } + /** + * Creating a container with given content. + *

See QList::QList(const QList<T> &)

+ * @param other container + */ public QList(Collection other) { super(null); QMetaType metaType = findElementMetaType(Objects.requireNonNull(other)); - if(metaType==null || metaType.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be type of QList."); - if(metaType.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be type of QList."); initialize(metaType.javaType(), QtJambi_LibraryUtilities.internal.nativeId(metaType), other); } @@ -92,6 +104,9 @@ public QList(Collection other) { initialize(elementMetaType.javaType(), QtJambi_LibraryUtilities.internal.nativeId(elementMetaType), other); } + /** + * Creating a container of type QVariant. + */ public static QList createVariantList(){ return new QList<>(new QMetaType(QMetaType.Type.QVariant)); } @@ -99,6 +114,10 @@ public static QList createVariantList(){ @QtUninvokable private native void initialize(Class elementType, long elementMetaType, Collection other); + /** + * Creates and returns a copy of this object. + *

See QList::QList(const QList<T> &)

+ */ @Override public QList clone(){ return new QList<>(this); @@ -112,35 +131,35 @@ public final void append(java.util.Collection t) { private static native void appendList(long __this__nativeId, java.util.Collection t); @QtUninvokable - public final void append(T t) { + public final void append(T t) { try { - final long nativeId = QtJambi_LibraryUtilities.internal.nativeId(this); - insert(nativeId, size(nativeId), 1, t); + append(QtJambi_LibraryUtilities.internal.nativeId(this), t); }catch(QNoNativeResourcesException e) { throw e; }catch(RuntimeException e) { throw QSet.handleException(e, elementMetaType(), t); } } + @QtUninvokable - public final T at(int i) { - if (i >= size() || i < 0) { - throw new IndexOutOfBoundsException(String.format("Accessing container of size %1$s at %2$s", size(), i)); - } + private static native void append(long __this__nativeId, T t); + + @QtUninvokable + public final T at(int i) { return at(QtJambi_LibraryUtilities.internal.nativeId(this), i); } @QtUninvokable private static native T at(long __this__nativeId, int i); @QtUninvokable - public final void clear() { + public final void clear() { clear(QtJambi_LibraryUtilities.internal.nativeId(this)); } @QtUninvokable private static native void clear(long __this__nativeId); @QtUninvokable - public final boolean contains(Object t) { + public final boolean contains(Object t) { try { return contains(QtJambi_LibraryUtilities.internal.nativeId(this), t); }catch(QNoNativeResourcesException e) { @@ -158,12 +177,12 @@ public final boolean contains(Object t) { private static native boolean contains(long __this__nativeId, T t); @QtUninvokable - public final int count() { + public final int count() { return size(); } @QtUninvokable - public final int count(T t) { + public final int count(T t) { try{ return count(QtJambi_LibraryUtilities.internal.nativeId(this), t); }catch(QNoNativeResourcesException e) { @@ -176,35 +195,35 @@ public final int count(T t) { private static native int count(long __this__nativeId, T t); @QtUninvokable - protected final QSequentialIterator begin() { + protected final QSequentialIterator begin() { return begin(QtJambi_LibraryUtilities.internal.nativeId(this)); } @QtUninvokable private static native QSequentialIterator begin(long __this__nativeId); @QtUninvokable - protected final QSequentialIterator end() { + protected final QSequentialIterator end() { return end(QtJambi_LibraryUtilities.internal.nativeId(this)); } @QtUninvokable private static native QSequentialIterator end(long __this__nativeId); @QtUninvokable - protected final QSequentialConstIterator constBegin() { + protected final QSequentialConstIterator constBegin() { return constBegin(QtJambi_LibraryUtilities.internal.nativeId(this)); } @QtUninvokable private static native QSequentialConstIterator constBegin(long __this__nativeId); @QtUninvokable - protected final QSequentialConstIterator constEnd() { + protected final QSequentialConstIterator constEnd() { return constEnd(QtJambi_LibraryUtilities.internal.nativeId(this)); } @QtUninvokable private static native QSequentialConstIterator constEnd(long __this__nativeId); @QtUninvokable - public final boolean endsWith(T t) { + public final boolean endsWith(T t) { try{ return endsWith(QtJambi_LibraryUtilities.internal.nativeId(this), t); }catch(QNoNativeResourcesException e) { @@ -217,12 +236,16 @@ public final boolean endsWith(T t) { private static native boolean endsWith(long __this__nativeId, T t); @QtUninvokable - public final T first() { - return at(0); + public final T first() { + try { + return at(0); + } catch (IndexOutOfBoundsException e) { + throw new NoSuchElementException(); + } } @QtUninvokable - public final int indexOf(T t, int from) { + public final int indexOf(T t, int from) { try { return indexOf(QtJambi_LibraryUtilities.internal.nativeId(this), t, from); }catch(QNoNativeResourcesException e) { @@ -240,19 +263,25 @@ public final int indexOf(T t, int from) { private static native int indexOf(long __this__nativeId, T t, int from); @QtUninvokable - public final void insert(int i, T t) { + public final void insert(int i, T t) { insert(i, 1, t); } @QtUninvokable - public final boolean isEmpty() { + public final boolean isEmpty() { return size()==0; } @QtUninvokable - public final T last() { - return at(size()-1); + public final T last() { + try { + return last(QtJambi_LibraryUtilities.internal.nativeId(this)); + } catch (IndexOutOfBoundsException e) { + throw new NoSuchElementException(); + } } + @QtUninvokable + private static native T last(long __this__nativeId); @SuppressWarnings("unchecked") @QtUninvokable @@ -261,7 +290,7 @@ public final int lastIndexOf(Object t) { return lastIndexOf((T)t, (int)-1); } @QtUninvokable - public final int lastIndexOf(T t, int from) { + public final int lastIndexOf(T t, int from) { try { return lastIndexOf(QtJambi_LibraryUtilities.internal.nativeId(this), t, from); }catch(QNoNativeResourcesException e) { @@ -279,7 +308,7 @@ public final int lastIndexOf(T t, int from) { private static native int lastIndexOf(long __this__nativeId, T t, int from); @QtUninvokable - public final int length() { + public final int length() { return size(); } @@ -288,40 +317,28 @@ public final QList mid(int pos) { return mid(pos, (int)-1); } @QtUninvokable - public final QList mid(int pos, int length) { - if (pos >= size() || pos < 0) { - throw new IndexOutOfBoundsException(String.format("Accessing container of size %1$s at %2$s", size(), pos)); - } - if (length>=0 && pos+length > size()) { - throw new IndexOutOfBoundsException(String.format("Accessing container of size %1$s from %2$s to %3$s", size(), pos, pos+length)); - } + public final QList mid(int pos, int length) { return mid(QtJambi_LibraryUtilities.internal.nativeId(this), pos, length); } @QtUninvokable private static native QList mid(long __this__nativeId, int pos, int length); @QtUninvokable - public final void move(int from, int to) { - if (from >= size() || from < 0) { - throw new IndexOutOfBoundsException(String.format("Accessing container of size %1$s at %2$s", size(), from)); - } - if (to >= size() || to < 0) { - throw new IndexOutOfBoundsException(String.format("Accessing container of size %1$s at %2$s", size(), to)); - } + public final void move(int from, int to) { move(QtJambi_LibraryUtilities.internal.nativeId(this), from, to); } @QtUninvokable private static native void move(long __this__nativeId, int from, int to); @QtUninvokable - private final boolean operator_equal(java.util.Collection l) { + private final boolean operator_equal(java.util.Collection l) { return operator_equal(QtJambi_LibraryUtilities.internal.nativeId(this), l); } @QtUninvokable private static native boolean operator_equal(long __this__nativeId, java.util.Collection l); @QtUninvokable - public final void prepend(T t) { + public final void prepend(T t) { try { insert(QtJambi_LibraryUtilities.internal.nativeId(this), 0, 1, t); }catch(QNoNativeResourcesException e) { @@ -332,7 +349,7 @@ public final void prepend(T t) { } @QtUninvokable - public final int removeAll(T t) { + public final int removeAll(T t) { try { return removeAll(QtJambi_LibraryUtilities.internal.nativeId(this), t); }catch(QNoNativeResourcesException e) { @@ -350,37 +367,24 @@ public final int removeAll(T t) { private static native int removeAll(long __this__nativeId, T t); @QtUninvokable - public final void removeAt(int i) { + public final void removeAt(int i) { remove(i, 1); } @QtUninvokable - public final T removeFirst() { - if(size()==0) - throw new NoSuchElementException(); - T e = at(0); - removeAt(0); - return e; + public final T removeFirst() { + return takeFirst(); } @QtUninvokable - public final T removeLast() { - if(size()==0) - throw new NoSuchElementException(); - T e = at(size()-1); - removeAt(size()-1); - return e; + public final T removeLast() { + return takeLast(); } @QtUninvokable - public final boolean removeOne(T t) { + public final boolean removeOne(T t) { try { - final long nativeId = QtJambi_LibraryUtilities.internal.nativeId(this); - int idx = indexOf(nativeId, t, 0); - if(idx>=0) { - remove(nativeId, idx, 1); - return true; - } + return removeOne(QtJambi_LibraryUtilities.internal.nativeId(this), t); }catch(QNoNativeResourcesException e) { throw e; }catch(IllegalArgumentException e) { @@ -391,12 +395,11 @@ public final boolean removeOne(T t) { } return false; } + @QtUninvokable + private static native boolean removeOne(long __this__nativeId, T t); @QtUninvokable - public final void replace(int i, T t) { - if (i >= size() || i < 0) { - throw new IndexOutOfBoundsException(String.format("Accessing container of size %1$s at %2$s", size(), i)); - } + public final void replace(int i, T t) { try { replace(QtJambi_LibraryUtilities.internal.nativeId(this), i, t); }catch(QNoNativeResourcesException e) { @@ -409,21 +412,21 @@ public final void replace(int i, T t) { private static native void replace(long __this__nativeId, int i, T t); @QtUninvokable - public final void reserve(int size) { + public final void reserve(int size) { reserve(QtJambi_LibraryUtilities.internal.nativeId(this), size); } @QtUninvokable private static native void reserve(long __this__nativeId, int size); @QtUninvokable - public final int size() { + public final int size() { return size(QtJambi_LibraryUtilities.internal.nativeId(this)); } @QtUninvokable private static native int size(long __this__nativeId); @QtUninvokable - public final boolean startsWith(T t) { + public final boolean startsWith(T t) { try{ return startsWith(QtJambi_LibraryUtilities.internal.nativeId(this), t); }catch(QNoNativeResourcesException e) { @@ -436,31 +439,41 @@ public final boolean startsWith(T t) { private static native boolean startsWith(long __this__nativeId, T t); @QtUninvokable - public final T takeAt(int i) { - T result = at(i); - removeAt(i); - return result; + public final T takeAt(int i) { + return takeAt(QtJambi_LibraryUtilities.internal.nativeId(this), i); } + @QtUninvokable + private static native T takeAt(long __this__nativeId, int i); @QtUninvokable - public final T takeFirst() { - return takeAt(0); + public final T takeFirst() { + try { + return takeAt(0); + } catch (IndexOutOfBoundsException e) { + throw new NoSuchElementException(); + } } @QtUninvokable - public final T takeLast() { - return takeAt(size()-1); + public final T takeLast() { + try{ + return takeLast(QtJambi_LibraryUtilities.internal.nativeId(this)); + } catch (IndexOutOfBoundsException e) { + throw new NoSuchElementException(); + } } + @QtUninvokable + private static native T takeLast(long __this__nativeId); @QtUninvokable - public final T value(int i) { + public final T value(int i) { return value(QtJambi_LibraryUtilities.internal.nativeId(this), i); } @QtUninvokable private static native T value(long __this__nativeId, int i); @QtUninvokable - public final T value(int i, T defaultValue) { + public final T value(int i, T defaultValue) { try { return valueDefault(QtJambi_LibraryUtilities.internal.nativeId(this), i, defaultValue); }catch(QNoNativeResourcesException e) { @@ -525,7 +538,7 @@ public final void add(int index, T e){ @QtUninvokable public final T set(int index, T e){ if(e!=null){ - T el = get(index); + T el = at(index); replace(index, e); return el; } else return null; @@ -552,14 +565,7 @@ public final T get(int index) { } @QtUninvokable - public final void swapItemsAt(int i, int j) { - int size = size(); - if (i >= size || i < 0) { - throw new IndexOutOfBoundsException(String.format("Accessing container of size %1$s at %2$s", size, i)); - } - if (j >= size || j < 0) { - throw new IndexOutOfBoundsException(String.format("Accessing container of size %1$s at %2$s", size, j)); - } + public final void swapItemsAt(int i, int j) { swapItemsAt(QtJambi_LibraryUtilities.internal.nativeId(this), i, j); } @@ -577,7 +583,7 @@ public final void fill(T t) { fill(t, (int)-1); } @QtUninvokable - public final void fill(T t, int size) { + public final void fill(T t, int size) { try { fill(QtJambi_LibraryUtilities.internal.nativeId(this), t, size); }catch(QNoNativeResourcesException e) { @@ -590,12 +596,7 @@ public final void fill(T t, int size) { private static native void fill(long __this__nativeId, T t, int size); @QtUninvokable - public final void insert(int i, int n, T t) { - final long nativeId = QtJambi_LibraryUtilities.internal.nativeId(this); - int size = size(nativeId); - if (i > size || i < 0) { - throw new IndexOutOfBoundsException(String.format("Accessing container of size %1$s at %2$s", size, i)); - } + public final void insert(int i, int n, T t) { try { insert(QtJambi_LibraryUtilities.internal.nativeId(this), i, n, t); }catch(QNoNativeResourcesException e) { @@ -604,37 +605,33 @@ public final void insert(int i, int n, T t) { throw QSet.handleException(e, elementMetaType(), t); } } + @QtUninvokable private static native void insert(long __this__nativeId, int i, int n, T t); @QtUninvokable - public final void remove(int i, int n) { - final long nativeId = QtJambi_LibraryUtilities.internal.nativeId(this); - int size = size(nativeId); - if (i+n > size || i < 0) { - throw new IndexOutOfBoundsException(String.format("Accessing container of size %1$s at %2$s", size, i+n)); - } - remove(nativeId, i, n); + public final void remove(int i, int n) { + remove(QtJambi_LibraryUtilities.internal.nativeId(this), i, n); } @QtUninvokable private static native void remove(long __this__nativeId, int i, int n); @QtUninvokable - public final int capacity() { + public final int capacity() { return capacity(QtJambi_LibraryUtilities.internal.nativeId(this)); } @QtUninvokable private static native int capacity(long __this__nativeId); @QtUninvokable - public final void resize(int size) { + public final void resize(int size) { resize(QtJambi_LibraryUtilities.internal.nativeId(this), size); } @QtUninvokable private static native void resize(long __this__nativeId, int size); @QtUninvokable - public final void squeeze() { + public final void squeeze() { squeeze(QtJambi_LibraryUtilities.internal.nativeId(this)); } @QtUninvokable @@ -677,10 +674,6 @@ final QMetaType elementMetaType() { @SafeVarargs public static QList of(T element0, T...elements) { QMetaType metaType = findElementMetaType(element0, elements); - if(metaType==null || metaType.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be type of QList."); - if(metaType.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be type of QList."); QList result; if(metaType.id()==QMetaType.Type.QString.value()) result = (QList)(QList)new QStringList(); diff --git a/src/java/modules/qtjambi/main/io/qt/core/QAssociativeConstIterator.java b/src/java/modules/qtjambi/main/io/qt/core/QAssociativeConstIterator.java index 655bb539..58b3f2d7 100644 --- a/src/java/modules/qtjambi/main/io/qt/core/QAssociativeConstIterator.java +++ b/src/java/modules/qtjambi/main/io/qt/core/QAssociativeConstIterator.java @@ -38,6 +38,36 @@ import io.qt.QtUninvokable; import io.qt.internal.AbstractSequentialConstIterator; +/** + *

Java-iterable wrapper for Qt's constant iterator types: + *

+ *

+ * @param key type + * @param value type + * @see QMap#constBegin() + * @see QMap#constEnd() + * @see QMap#find(Object) + * @see QMap#lowerBound(Object) + * @see QMap#upperBound(Object) + * @see QHash#constBegin() + * @see QHash#constEnd() + * @see QHash#find(Object) + * @see QMultiMap#constBegin() + * @see QMultiMap#constEnd() + * @see QMultiMap#find(Object) + * @see QMultiMap#find(Object, Object) + * @see QMultiMap#lowerBound(Object) + * @see QMultiMap#upperBound(Object) + * @see QMultiHash#constBegin() + * @see QMultiHash#constEnd() + * @see QMultiHash#find(Object) + * @see #iterator() + */ @SuppressWarnings("deprecation") public class QAssociativeConstIterator extends io.qt.internal.AbstractAssociativeConstIterator implements java.lang.Iterable>, QMapIterator { @@ -50,6 +80,9 @@ public class QAssociativeConstIterator extends io.qt.internal.AbstractAssoc super(owner); } + /** + * Returns the current item's key. + */ @QtUninvokable protected final K key() { return key(QtJambi_LibraryUtilities.internal.nativeId(this)); @@ -57,16 +90,25 @@ protected final K key() { @QtUninvokable private static native K key(long __this__nativeId); + /** + * Returns the current item's value. + */ @QtUninvokable protected final V val() { return QSequentialConstIterator.value(QtJambi_LibraryUtilities.internal.nativeId(this)); } + /** + * Advances the iterator to the next item in the container. + */ @QtUninvokable protected final void increment() { QSequentialConstIterator.increment(QtJambi_LibraryUtilities.internal.nativeId(this)); } + /** + * Advances the iterator to the previous item in the container. + */ @QtUninvokable protected final void decrement() { QSequentialConstIterator.decrement(QtJambi_LibraryUtilities.internal.nativeId(this)); @@ -79,11 +121,17 @@ private final boolean lessThan(AbstractSequentialConstIterator other) { return QSequentialConstIterator.lessThan(QtJambi_LibraryUtilities.internal.nativeId(this), QtJambi_LibraryUtilities.internal.nativeId(other)); } + /** + * Returns true if other points to the same item as this iterator; otherwise returns false. + */ @QtUninvokable protected final boolean equals(AbstractSequentialConstIterator o) { return QSequentialConstIterator.operator_equal(QtJambi_LibraryUtilities.internal.nativeId(this), QtJambi_LibraryUtilities.internal.nativeId(o)); } + /** + * {@inheritDoc} + */ @Override @QtUninvokable public boolean equals(Object other) { @@ -108,18 +156,28 @@ final boolean isValid() { return !equals(end); } + /** + * {@inheritDoc} + */ @QtUninvokable public final Iterator> iterator(){ return toJavaMapIterator(); } + /** + * Returns the key value pair at iterator's position in the container or emptiness in case of end. + */ @QtUninvokable public final Optional> keyValuePair() { return !isValid() ? Optional.empty() : Optional.ofNullable(new QPair<>(key(), val())); } + /** + * Returns the current item's value if item is valid + * or throws NoSuchElementException otherwise. + */ @QtUninvokable - protected final V checkedValue() { + protected final V checkedValue() throws NoSuchElementException { if(isValid()) { return val(); }else { @@ -127,8 +185,12 @@ protected final V checkedValue() { } } + /** + * Returns the current item's key if item is valid + * or throws NoSuchElementException otherwise. + */ @QtUninvokable - protected final K checkedKey() { + protected final K checkedKey() throws NoSuchElementException { if(isValid()) { return key(); }else { diff --git a/src/java/modules/qtjambi/main/io/qt/core/QAssociativeIterator.java b/src/java/modules/qtjambi/main/io/qt/core/QAssociativeIterator.java index f80fd2b5..cca6548b 100644 --- a/src/java/modules/qtjambi/main/io/qt/core/QAssociativeIterator.java +++ b/src/java/modules/qtjambi/main/io/qt/core/QAssociativeIterator.java @@ -34,6 +34,26 @@ import io.qt.QtUninvokable; import io.qt.internal.AbstractAssociativeIterator; +/** + *

Java-iterable wrapper for Qt's iterator types: + *

+ *

+ * @param key type + * @param value type + * @see QMap#begin() + * @see QMap#end() + * @see QHash#begin() + * @see QHash#end() + * @see QMultiMap#begin() + * @see QMultiMap#end() + * @see QMultiHash#begin() + * @see QMultiHash#end() + */ public final class QAssociativeIterator extends QAssociativeConstIterator implements AbstractAssociativeIterator{ @NativeAccess @@ -41,6 +61,10 @@ private QAssociativeIterator(QtObject owner) { super(owner); } + /** + * Set the value at iterator's position in the container. + * @param newValue the new value + */ @QtUninvokable public final boolean setValue(V newValue) { if(!isValid()) diff --git a/src/java/modules/qtjambi/main/io/qt/core/QDeclarableSignals.java b/src/java/modules/qtjambi/main/io/qt/core/QDeclarableSignals.java index 61c9d78e..9e0680ec 100644 --- a/src/java/modules/qtjambi/main/io/qt/core/QDeclarableSignals.java +++ b/src/java/modules/qtjambi/main/io/qt/core/QDeclarableSignals.java @@ -37,6 +37,10 @@ import io.qt.QtUninvokable; import io.qt.core.QMetaObject.*; +/** + * QDeclarableSignals is a namespace containing signal types to be used in any other contexts than member signals. + * Declarable signals are never realized as Qt's meta object signals but have a lightweight Java implementation. + */ public final class QDeclarableSignals { private QDeclarableSignals() {} diff --git a/src/java/modules/qtjambi/main/io/qt/core/QException.java b/src/java/modules/qtjambi/main/io/qt/core/QException.java index 992282d5..14d50239 100644 --- a/src/java/modules/qtjambi/main/io/qt/core/QException.java +++ b/src/java/modules/qtjambi/main/io/qt/core/QException.java @@ -31,7 +31,7 @@ /** *

Java wrapper for Qt class QException

- *

The QException class provides a base class for exceptions that can transferred across threads.

+ *

The QException class provides a base class for exceptions that can be transferred across threads.

*/ public class QException extends RuntimeException { private static final long serialVersionUID = 8761466728092827817L; diff --git a/src/java/modules/qtjambi/main/io/qt/core/QFutureSynchronizer.java b/src/java/modules/qtjambi/main/io/qt/core/QFutureSynchronizer.java index 9dbc3e2e..5e5c35d4 100644 --- a/src/java/modules/qtjambi/main/io/qt/core/QFutureSynchronizer.java +++ b/src/java/modules/qtjambi/main/io/qt/core/QFutureSynchronizer.java @@ -14,7 +14,6 @@ public final class QFutureSynchronizer QtJambi_LibraryUtilities.initialize(); } - /** *

See QFutureSynchronizer::

*/ diff --git a/src/java/modules/qtjambi/main/io/qt/core/QHash.java b/src/java/modules/qtjambi/main/io/qt/core/QHash.java index 596c6ecf..5e6b3d4d 100644 --- a/src/java/modules/qtjambi/main/io/qt/core/QHash.java +++ b/src/java/modules/qtjambi/main/io/qt/core/QHash.java @@ -48,98 +48,121 @@ public class QHash extends io.qt.internal.AbstractHash implements Clon QtJambi_LibraryUtilities.initialize(); } + /** + * Constructor for internal use only. + * @param p expected to be null. + */ @NativeAccess protected QHash(QPrivateConstructor p) { super(p); } + /** + * Creating a container with given key and value type. + *

See QHash::QHash()

+ * @param keyType the type K + * @param valueType the type V + */ public QHash(Class keyType, Class valueType) { super(null); QMetaType keyMetaType = QMetaType.fromType(keyType); QMetaType valueMetaType = QMetaType.fromType(valueType); - if(keyMetaType.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be key type of QHash."); - if(keyMetaType.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be key type of QHash."); - if(valueMetaType.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be value type of QHash."); - if(valueMetaType.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be value type of QHash."); initialize(keyType, QtJambi_LibraryUtilities.internal.nativeId(keyMetaType), valueType, QtJambi_LibraryUtilities.internal.nativeId(valueMetaType), null); } + /** + * Creating a container with given content. + *

See QHash::QHash(const QHash<Key, T> &)

+ * @param other map + */ public QHash(Map other) { super(null); QPair metaTypes = QMap.findMapMetaType(Objects.requireNonNull(other)); - if(metaTypes.first.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be key type of QHash."); - if(metaTypes.first.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be key type of QHash."); - if(metaTypes.second.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be value type of QHash."); - if(metaTypes.second.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be value type of QHash."); initialize(metaTypes.first.javaType(), QtJambi_LibraryUtilities.internal.nativeId(metaTypes.first), metaTypes.second.javaType(), QtJambi_LibraryUtilities.internal.nativeId(metaTypes.second), other); } + /** + * Creating a container with given key and value type. + *

See QHash::QHash()

+ * @param keyType the type K + * @param valueMetaType the type V + */ public QHash(Class keyType, QMetaType valueMetaType) { super(null); QMetaType keyMetaType = QMetaType.fromType(keyType); - if(keyMetaType.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be key type of QHash."); - if(keyMetaType.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be key type of QHash."); - if(valueMetaType.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be value type of QHash."); - if(valueMetaType.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be value type of QHash."); initialize(keyType, QtJambi_LibraryUtilities.internal.nativeId(keyMetaType), valueMetaType.javaType(), QtJambi_LibraryUtilities.internal.nativeId(valueMetaType), null); } + /** + * Creating a container with given key and value type. + *

See QHash::QHash()

+ * @param keyMetaType the type K + * @param valueType the type V + */ public QHash(QMetaType keyMetaType, Class valueType) { super(null); QMetaType valueMetaType = QMetaType.fromType(valueType); - if(keyMetaType.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be key type of QHash."); - if(keyMetaType.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be key type of QHash."); - if(valueMetaType.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be value type of QHash."); - if(valueMetaType.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be value type of QHash."); initialize(keyMetaType.javaType(), QtJambi_LibraryUtilities.internal.nativeId(keyMetaType), valueType, QtJambi_LibraryUtilities.internal.nativeId(valueMetaType), null); } + /** + * Creating a container with given key and value type. + *

See QHash::QHash()

+ * @param keyType the type K + * @param valueMetaType the type V + */ public QHash(Class keyType, QMetaType.Type valueMetaType) { this(keyType, new QMetaType(valueMetaType)); } + /** + * Creating a container with given key and value type. + *

See QHash::QHash()

+ * @param keyMetaType the type K + * @param valueType the type V + */ public QHash(QMetaType.Type keyMetaType, Class valueType) { this(new QMetaType(keyMetaType), valueType); } + /** + * Creating a container with given key and value type. + *

See QHash::QHash()

+ * @param keyMetaType the type K + * @param valueMetaType the type V + */ public QHash(QMetaType.Type keyMetaType, QMetaType valueMetaType) { this(new QMetaType(keyMetaType), valueMetaType); } + /** + * Creating a container with given key and value type. + *

See QHash::QHash()

+ * @param keyMetaType the type K + * @param valueMetaType the type V + */ public QHash(QMetaType keyMetaType, QMetaType.Type valueMetaType) { this(keyMetaType, new QMetaType(valueMetaType)); } + /** + * Creating a container with given key and value type. + *

See QHash::QHash()

+ * @param keyMetaType the type K + * @param valueMetaType the type V + */ public QHash(QMetaType.Type keyMetaType, QMetaType.Type valueMetaType) { this(new QMetaType(keyMetaType), new QMetaType(valueMetaType)); } + /** + * Creating a container with given key and value type. + *

See QHash::QHash()

+ * @param keyMetaType the type K + * @param valueMetaType the type V + */ public QHash(QMetaType keyMetaType, QMetaType valueMetaType) { super(null); - if(keyMetaType.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be key type of QHash."); - if(keyMetaType.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be key type of QHash."); - if(valueMetaType.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be value type of QHash."); - if(valueMetaType.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be value type of QHash."); initialize(keyMetaType.javaType(), QtJambi_LibraryUtilities.internal.nativeId(keyMetaType), valueMetaType.javaType(), QtJambi_LibraryUtilities.internal.nativeId(valueMetaType), null); } @@ -150,6 +173,10 @@ public static QHash createVariantHash() { return new QHash<>(new QMetaType(QMetaType.Type.QString), new QMetaType(QMetaType.Type.QVariant)); } + /** + * Creates and returns a copy of this object. + *

See QHash::QHash(const QHash<Key, T> &)

+ */ @Override public QHash clone(){ return new QHash<>(this); diff --git a/src/java/modules/qtjambi/main/io/qt/core/QInstanceMemberSignals.java b/src/java/modules/qtjambi/main/io/qt/core/QInstanceMemberSignals.java index fff69b5b..c8915790 100644 --- a/src/java/modules/qtjambi/main/io/qt/core/QInstanceMemberSignals.java +++ b/src/java/modules/qtjambi/main/io/qt/core/QInstanceMemberSignals.java @@ -97,6 +97,7 @@ /** * Interface giving access to non-QObject lightweight signals. * Subtypes also need to implement {@link QtSignalEmitterInterface} to use signals. + * Non-QObject signals are never realized as Qt's meta object signals but have a lightweight Java implementation. */ public interface QInstanceMemberSignals { /** diff --git a/src/java/modules/qtjambi/main/io/qt/core/QLogging.java b/src/java/modules/qtjambi/main/io/qt/core/QLogging.java index 4ec3214e..d178761e 100644 --- a/src/java/modules/qtjambi/main/io/qt/core/QLogging.java +++ b/src/java/modules/qtjambi/main/io/qt/core/QLogging.java @@ -267,14 +267,29 @@ static void initialize() { } @QtUninvokable - private static Supplier format(String message, Object...args) { - return ()->{ - try { - return String.format(message, args); - } catch (IllegalFormatException e) { - return QString.format(message, args).toString(); - } - }; + private static CharSequence format(String message, Object...args) { + int idx = message.indexOf('%'); + if(idx>=0) { + char c = message.charAt(idx+1); + if(c>='0' && c<='9') { + while(c>='0' && c<='9') { + c = message.charAt((++idx)+1); + } + if(c!='$') { + return QString.format(message, args); + } + } + } + try { + return String.format(message, args); + } catch (IllegalFormatException e) { + return QString.format(message, args); + } + } + + @QtUninvokable + private static Supplier messageSupplier(String message, Object...args) { + return ()->format(message, args); } /** @@ -296,7 +311,7 @@ public static void qWarning(String message) { */ @QtUninvokable public static void qWarning(String message, Object...args) { - showMessageFromSupplier(QtMsgType.QtWarningMsg.value(), format(message, args)); + showMessageFromSupplier(QtMsgType.QtWarningMsg.value(), messageSupplier(message, args)); } /** @@ -324,7 +339,7 @@ public static void qErrnoWarning(String message, Object...args) { @QtUninvokable public static void qErrnoWarning(int code, String message, Object...args) { - qErrnoWarning(code, args==null || args.length==0 ? message : format(message, args).get()); + qErrnoWarning(code, args==null || args.length==0 ? message : format(message, args).toString()); } @QtUninvokable @@ -349,7 +364,7 @@ public static void qDebug(String message) { */ @QtUninvokable public static void qDebug(String message, Object...args) { - showMessageFromSupplier(QtMsgType.QtDebugMsg.value(), format(message, args)); + showMessageFromSupplier(QtMsgType.QtDebugMsg.value(), messageSupplier(message, args)); } /** @@ -371,7 +386,7 @@ public static void qInfo(String message) { */ @QtUninvokable public static void qInfo(String message, Object...args) { - showMessageFromSupplier(QtMsgType.QtInfoMsg.value(), format(message, args)); + showMessageFromSupplier(QtMsgType.QtInfoMsg.value(), messageSupplier(message, args)); } /** @@ -393,7 +408,7 @@ public static void qCritical(String message) { */ @QtUninvokable public static void qCritical(String message, Object...args) { - showMessageFromSupplier(QtMsgType.QtCriticalMsg.value(), format(message, args)); + showMessageFromSupplier(QtMsgType.QtCriticalMsg.value(), messageSupplier(message, args)); } /** @@ -416,7 +431,7 @@ public static void qFatal(String message) { */ @QtUninvokable public static void qFatal(String message, Object...args) { - showMessageFromSupplier(QtMsgType.QtFatalMsg.value(), format(message, args)); + showMessageFromSupplier(QtMsgType.QtFatalMsg.value(), messageSupplier(message, args)); } /** @@ -439,7 +454,7 @@ public static void qCWarning(QLoggingCategory category, String message) { */ @QtUninvokable public static void qCWarning(QLoggingCategory category, String message, Object...args) { - showCMessageFromSupplier(QtMsgType.QtWarningMsg.value(), QtJambi_LibraryUtilities.internal.checkedNativeId(Objects.requireNonNull(category)), format(message, args)); + showCMessageFromSupplier(QtMsgType.QtWarningMsg.value(), QtJambi_LibraryUtilities.internal.checkedNativeId(Objects.requireNonNull(category)), messageSupplier(message, args)); } /** @@ -462,7 +477,7 @@ public static void qCDebug(QLoggingCategory category, String message) { */ @QtUninvokable public static void qCDebug(QLoggingCategory category, String message, Object...args) { - showCMessageFromSupplier(QtMsgType.QtDebugMsg.value(), QtJambi_LibraryUtilities.internal.checkedNativeId(Objects.requireNonNull(category)), format(message, args)); + showCMessageFromSupplier(QtMsgType.QtDebugMsg.value(), QtJambi_LibraryUtilities.internal.checkedNativeId(Objects.requireNonNull(category)), messageSupplier(message, args)); } /** @@ -485,7 +500,7 @@ public static void qCInfo(QLoggingCategory category, String message) { */ @QtUninvokable public static void qCInfo(QLoggingCategory category, String message, Object...args) { - showCMessageFromSupplier(QtMsgType.QtInfoMsg.value(), QtJambi_LibraryUtilities.internal.checkedNativeId(Objects.requireNonNull(category)), format(message, args)); + showCMessageFromSupplier(QtMsgType.QtInfoMsg.value(), QtJambi_LibraryUtilities.internal.checkedNativeId(Objects.requireNonNull(category)), messageSupplier(message, args)); } /** @@ -508,7 +523,7 @@ public static void qCCritical(QLoggingCategory category, String message) { */ @QtUninvokable public static void qCCritical(QLoggingCategory category, String message, Object...args) { - showCMessageFromSupplier(QtMsgType.QtCriticalMsg.value(), QtJambi_LibraryUtilities.internal.checkedNativeId(Objects.requireNonNull(category)), format(message, args)); + showCMessageFromSupplier(QtMsgType.QtCriticalMsg.value(), QtJambi_LibraryUtilities.internal.checkedNativeId(Objects.requireNonNull(category)), messageSupplier(message, args)); } /** @@ -517,7 +532,7 @@ public static void qCCritical(QLoggingCategory category, String message, Object. * @param message */ @QtUninvokable - public static void qWarning(Supplier message) { + public static void qWarning(Supplier message) { showMessageFromSupplier(QtMsgType.QtWarningMsg.value(), message); } @@ -527,7 +542,7 @@ public static void qWarning(Supplier message) { * @param message */ @QtUninvokable - public static void qDebug(Supplier message) { + public static void qDebug(Supplier message) { showMessageFromSupplier(QtMsgType.QtDebugMsg.value(), message); } @@ -537,7 +552,7 @@ public static void qDebug(Supplier message) { * @param message */ @QtUninvokable - public static void qInfo(Supplier message) { + public static void qInfo(Supplier message) { showMessageFromSupplier(QtMsgType.QtInfoMsg.value(), message); } @@ -547,7 +562,7 @@ public static void qInfo(Supplier message) { * @param message */ @QtUninvokable - public static void qCritical(Supplier message) { + public static void qCritical(Supplier message) { showMessageFromSupplier(QtMsgType.QtCriticalMsg.value(), message); } @@ -558,7 +573,7 @@ public static void qCritical(Supplier message) { * @param message */ @QtUninvokable - public static void qFatal(Supplier message) { + public static void qFatal(Supplier message) { showMessageFromSupplier(QtMsgType.QtFatalMsg.value(), message); } @@ -569,7 +584,7 @@ public static void qFatal(Supplier message) { * @param message */ @QtUninvokable - public static void qCWarning(QLoggingCategory category, Supplier message) { + public static void qCWarning(QLoggingCategory category, Supplier message) { showCMessageFromSupplier(QtMsgType.QtWarningMsg.value(), QtJambi_LibraryUtilities.internal.checkedNativeId(Objects.requireNonNull(category)), message); } @@ -580,7 +595,7 @@ public static void qCWarning(QLoggingCategory category, Supplier message * @param message */ @QtUninvokable - public static void qCDebug(QLoggingCategory category, Supplier message) { + public static void qCDebug(QLoggingCategory category, Supplier message) { showCMessageFromSupplier(QtMsgType.QtDebugMsg.value(), QtJambi_LibraryUtilities.internal.checkedNativeId(Objects.requireNonNull(category)), message); } @@ -591,7 +606,7 @@ public static void qCDebug(QLoggingCategory category, Supplier message) * @param message */ @QtUninvokable - public static void qCInfo(QLoggingCategory category, Supplier message) { + public static void qCInfo(QLoggingCategory category, Supplier message) { showCMessageFromSupplier(QtMsgType.QtInfoMsg.value(), QtJambi_LibraryUtilities.internal.checkedNativeId(Objects.requireNonNull(category)), message); } @@ -602,7 +617,7 @@ public static void qCInfo(QLoggingCategory category, Supplier message) { * @param message */ @QtUninvokable - public static void qCCritical(QLoggingCategory category, Supplier message) { + public static void qCCritical(QLoggingCategory category, Supplier message) { showCMessageFromSupplier(QtMsgType.QtCriticalMsg.value(), QtJambi_LibraryUtilities.internal.checkedNativeId(Objects.requireNonNull(category)), message); } @@ -689,10 +704,10 @@ public static QDebug qCCritical(QLoggingCategory category) { @QtUninvokable private native static void showMessage(int messageType, String message); @QtUninvokable - private native static void showMessageFromSupplier(int messageType, Supplier message); + private native static void showMessageFromSupplier(int messageType, Supplier message); @QtUninvokable private native static void showCMessage(int messageType, long categoryId, String message); @QtUninvokable - private native static void showCMessageFromSupplier(int messageType, long categoryId, Supplier message); + private native static void showCMessageFromSupplier(int messageType, long categoryId, Supplier message); } diff --git a/src/java/modules/qtjambi/main/io/qt/core/QMap.java b/src/java/modules/qtjambi/main/io/qt/core/QMap.java index 5d901829..bb2dd53a 100644 --- a/src/java/modules/qtjambi/main/io/qt/core/QMap.java +++ b/src/java/modules/qtjambi/main/io/qt/core/QMap.java @@ -52,98 +52,121 @@ public class QMap extends io.qt.internal.AbstractMap implements Clonea QtJambi_LibraryUtilities.initialize(); } + /** + * Constructor for internal use only. + * @param p expected to be null. + */ @NativeAccess protected QMap(QPrivateConstructor p) { super(p); } + /** + * Creating a container with given key and value type. + *

See QMap::QMap()

+ * @param keyType the type K + * @param valueMetaType the type V + */ public QMap(Class keyType, QMetaType.Type valueMetaType) { this(keyType, new QMetaType(valueMetaType)); } + /** + * Creating a container with given key and value type. + *

See QMap::QMap()

+ * @param keyMetaType the type K + * @param valueType the type V + */ public QMap(QMetaType.Type keyMetaType, Class valueType) { this(new QMetaType(keyMetaType), valueType); } + /** + * Creating a container with given key and value type. + *

See QMap::QMap()

+ * @param keyMetaType the type K + * @param valueMetaType the type V + */ public QMap(QMetaType.Type keyMetaType, QMetaType valueMetaType) { this(new QMetaType(keyMetaType), valueMetaType); } + /** + * Creating a container with given key and value type. + *

See QMap::QMap()

+ * @param keyMetaType the type K + * @param valueMetaType the type V + */ public QMap(QMetaType keyMetaType, QMetaType.Type valueMetaType) { this(keyMetaType, new QMetaType(valueMetaType)); } + /** + * Creating a container with given key and value type. + *

See QMap::QMap()

+ * @param keyMetaType the type K + * @param valueMetaType the type V + */ public QMap(QMetaType.Type keyMetaType, QMetaType.Type valueMetaType) { this(new QMetaType(keyMetaType), new QMetaType(valueMetaType)); } + /** + * Creating a container with given key and value type. + *

See QMap::QMap()

+ * @param keyType the type K + * @param valueType the type V + */ public QMap(Class keyType, Class valueType) { super(null); QMetaType keyMetaType = QMetaType.fromType(keyType); QMetaType valueMetaType = QMetaType.fromType(valueType); - if(keyMetaType.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be key type of QMap."); - if(keyMetaType.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be key type of QMap."); - if(valueMetaType.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be value type of QMap."); - if(valueMetaType.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be value type of QMap."); initialize(keyType, QtJambi_LibraryUtilities.internal.nativeId(keyMetaType), valueType, QtJambi_LibraryUtilities.internal.nativeId(valueMetaType), null); } + /** + * Creating a container with given content. + *

See QMap::QMap(const QMap<Key, T> &)

+ * @param other map + */ public QMap(Map other) { super(null); QPair metaTypes = QMap.findMapMetaType(Objects.requireNonNull(other)); - if(metaTypes.first.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be key type of QMap."); - if(metaTypes.first.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be key type of QMap."); - if(metaTypes.second.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be value type of QMap."); - if(metaTypes.second.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be value type of QMap."); initialize(metaTypes.first.javaType(), QtJambi_LibraryUtilities.internal.nativeId(metaTypes.first), metaTypes.second.javaType(), QtJambi_LibraryUtilities.internal.nativeId(metaTypes.second), other); } + /** + * Creating a container with given key and value type. + *

See QMap::QMap()

+ * @param keyType the type K + * @param valueMetaType the type V + */ public QMap(Class keyType, QMetaType valueMetaType) { super(null); QMetaType keyMetaType = QMetaType.fromType(keyType); - if(keyMetaType.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be key type of QMap."); - if(keyMetaType.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be key type of QMap."); - if(valueMetaType.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be value type of QMap."); - if(valueMetaType.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be value type of QMap."); initialize(keyType, QtJambi_LibraryUtilities.internal.nativeId(keyMetaType), valueMetaType.javaType(), QtJambi_LibraryUtilities.internal.nativeId(valueMetaType), null); } + /** + * Creating a container with given key and value type. + *

See QMap::QMap()

+ * @param keyMetaType the type K + * @param valueType the type V + */ public QMap(QMetaType keyMetaType, Class valueType) { super(null); QMetaType valueMetaType = QMetaType.fromType(valueType); - if(keyMetaType.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be key type of QMap."); - if(keyMetaType.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be key type of QMap."); - if(valueMetaType.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be value type of QMap."); - if(valueMetaType.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be value type of QMap."); initialize(keyMetaType.javaType(), QtJambi_LibraryUtilities.internal.nativeId(keyMetaType), valueType, QtJambi_LibraryUtilities.internal.nativeId(valueMetaType), null); } + /** + * Creating a container with given key and value type. + *

See QMap::QMap()

+ * @param keyMetaType the type K + * @param valueMetaType the type V + */ public QMap(QMetaType keyMetaType, QMetaType valueMetaType) { super(null); - if(keyMetaType.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be key type of QMap."); - if(keyMetaType.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be key type of QMap."); - if(valueMetaType.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be value type of QMap."); - if(valueMetaType.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be value type of QMap."); initialize(keyMetaType.javaType(), QtJambi_LibraryUtilities.internal.nativeId(keyMetaType), valueMetaType.javaType(), QtJambi_LibraryUtilities.internal.nativeId(valueMetaType), null); } @@ -220,6 +243,10 @@ public static QMap createVariantMap() { @QtUninvokable private native void initialize(Class keyType, long keyMetaType, Class valueType, long valueMetaType, Map other); + /** + * Creates and returns a copy of this object. + *

See QMap::QMap(const QMap<Key, T> &)

+ */ @Override public QMap clone(){ return new QMap<>(this); diff --git a/src/java/modules/qtjambi/main/io/qt/core/QMultiHash.java b/src/java/modules/qtjambi/main/io/qt/core/QMultiHash.java index 8e3a8bd9..8dc26a73 100644 --- a/src/java/modules/qtjambi/main/io/qt/core/QMultiHash.java +++ b/src/java/modules/qtjambi/main/io/qt/core/QMultiHash.java @@ -51,104 +51,130 @@ public class QMultiHash extends io.qt.internal.AbstractMultiHash imple QtJambi_LibraryUtilities.initialize(); } + /** + * Constructor for internal use only. + * @param p expected to be null. + */ @NativeAccess protected QMultiHash(QPrivateConstructor p) { super(p); } + /** + * Creating a container with given key and value type. + *

See QMultiHash::QMultiHash()

+ * @param keyType the type K + * @param valueMetaType the type V + */ public QMultiHash(Class keyType, QMetaType.Type valueMetaType) { this(keyType, new QMetaType(valueMetaType)); } + /** + * Creating a container with given key and value type. + *

See QMultiHash::QMultiHash()

+ * @param keyMetaType the type K + * @param valueType the type V + */ public QMultiHash(QMetaType.Type keyMetaType, Class valueType) { this(new QMetaType(keyMetaType), valueType); } + /** + * Creating a container with given key and value type. + *

See QMultiHash::QMultiHash()

+ * @param keyMetaType the type K + * @param valueMetaType the type V + */ public QMultiHash(QMetaType.Type keyMetaType, QMetaType valueMetaType) { this(new QMetaType(keyMetaType), valueMetaType); } + /** + * Creating a container with given key and value type. + *

See QMultiHash::QMultiHash()

+ * @param keyMetaType the type K + * @param valueMetaType the type V + */ public QMultiHash(QMetaType keyMetaType, QMetaType.Type valueMetaType) { this(keyMetaType, new QMetaType(valueMetaType)); } + /** + * Creating a container with given key and value type. + *

See QMultiHash::QMultiHash()

+ * @param keyMetaType the type K + * @param valueMetaType the type V + */ public QMultiHash(QMetaType.Type keyMetaType, QMetaType.Type valueMetaType) { this(new QMetaType(keyMetaType), new QMetaType(valueMetaType)); } + /** + * Creating a container with given key and value type. + *

See QMultiHash::QMultiHash()

+ * @param keyType the type K + * @param valueType the type V + */ public QMultiHash(Class keyType, Class valueType) { super(null); QMetaType keyMetaType = QMetaType.fromType(keyType); QMetaType valueMetaType = QMetaType.fromType(valueType); - if(keyMetaType.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be key type of QMultiHash."); - if(keyMetaType.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be key type of QMultiHash."); - if(valueMetaType.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be value type of QMultiHash."); - if(valueMetaType.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be value type of QMultiHash."); initialize(keyType, QtJambi_LibraryUtilities.internal.nativeId(keyMetaType), valueType, QtJambi_LibraryUtilities.internal.nativeId(valueMetaType), null); } + /** + * Creating a container with given content. + *

See QMultiHash::QMultiHash(const QHash<Key, T> &)

+ * @param other map + */ public QMultiHash(Map> other) { super(null); QPair metaTypes = findMapMetaType(Objects.requireNonNull(other)); - if(metaTypes.first.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be key type of QMultiHash."); - if(metaTypes.first.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be key type of QMultiHash."); - if(metaTypes.second.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be value type of QMultiHash."); - if(metaTypes.second.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be value type of QMultiHash."); initialize(metaTypes.first.javaType(), QtJambi_LibraryUtilities.internal.nativeId(metaTypes.first), metaTypes.second.javaType(), QtJambi_LibraryUtilities.internal.nativeId(metaTypes.second), other); } + /** + * Creating a container with given key and value type. + *

See QMultiHash::QMultiHash()

+ * @param keyType the type K + * @param valueMetaType the type V + */ public QMultiHash(Class keyType, QMetaType valueMetaType) { super(null); QMetaType keyMetaType = QMetaType.fromType(keyType); - if(keyMetaType.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be key type of QMultiHash."); - if(keyMetaType.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be key type of QMultiHash."); - if(valueMetaType.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be value type of QMultiHash."); - if(valueMetaType.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be value type of QMultiHash."); initialize(keyMetaType.javaType(), QtJambi_LibraryUtilities.internal.nativeId(keyMetaType), valueMetaType.javaType(), QtJambi_LibraryUtilities.internal.nativeId(valueMetaType), null); } + /** + * Creating a container with given key and value type. + *

See QMultiHash::QMultiHash()

+ * @param keyMetaType the type K + * @param valueType the type V + */ public QMultiHash(QMetaType keyMetaType, Class valueType) { super(null); QMetaType valueMetaType = QMetaType.fromType(valueType); - if(keyMetaType.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be key type of QMultiHash."); - if(keyMetaType.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be key type of QMultiHash."); - if(valueMetaType.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be value type of QMultiHash."); - if(valueMetaType.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be value type of QMultiHash."); initialize(keyMetaType.javaType(), QtJambi_LibraryUtilities.internal.nativeId(keyMetaType), valueType, QtJambi_LibraryUtilities.internal.nativeId(valueMetaType), null); } + /** + * Creating a container with given key and value type. + *

See QMultiHash::QMultiHash()

+ * @param keyMetaType the type K + * @param valueMetaType the type V + */ public QMultiHash(QMetaType keyMetaType, QMetaType valueMetaType) { super(null); - if(keyMetaType.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be key type of QMultiHash."); - if(keyMetaType.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be key type of QMultiHash."); - if(valueMetaType.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be value type of QMultiHash."); - if(valueMetaType.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be value type of QMultiHash."); initialize(keyMetaType.javaType(), QtJambi_LibraryUtilities.internal.nativeId(keyMetaType), valueMetaType.javaType(), QtJambi_LibraryUtilities.internal.nativeId(valueMetaType), null); } @QtUninvokable private native void initialize(Class keyType, long keyMetaType, Class valueType, long valueMetaType, Map> other); + /** + * Creates and returns a copy of this object. + */ @Override public QMultiHash clone(){ return new QMultiHash<>(this); diff --git a/src/java/modules/qtjambi/main/io/qt/core/QMultiMap.java b/src/java/modules/qtjambi/main/io/qt/core/QMultiMap.java index 9af3cdc9..09e2dc34 100644 --- a/src/java/modules/qtjambi/main/io/qt/core/QMultiMap.java +++ b/src/java/modules/qtjambi/main/io/qt/core/QMultiMap.java @@ -48,104 +48,131 @@ public class QMultiMap extends io.qt.internal.AbstractMultiMap impleme QtJambi_LibraryUtilities.initialize(); } + /** + * Constructor for internal use only. + * @param p expected to be null. + */ @NativeAccess protected QMultiMap(QPrivateConstructor p) { super(p); } + /** + * Creating a container with given key and value type. + *

See QMultiMap::QMultiMap()

+ * @param keyType the type K + * @param valueMetaType the type V + */ public QMultiMap(Class keyType, QMetaType.Type valueMetaType) { this(keyType, new QMetaType(valueMetaType)); } + /** + * Creating a container with given key and value type. + *

See QMultiMap::QMultiMap()

+ * @param keyMetaType the type K + * @param valueType the type V + */ public QMultiMap(QMetaType.Type keyMetaType, Class valueType) { this(new QMetaType(keyMetaType), valueType); } + /** + * Creating a container with given key and value type. + *

See QMultiMap::QMultiMap()

+ * @param keyMetaType the type K + * @param valueMetaType the type V + */ public QMultiMap(QMetaType.Type keyMetaType, QMetaType valueMetaType) { this(new QMetaType(keyMetaType), valueMetaType); } + /** + * Creating a container with given key and value type. + *

See QMultiMap::QMultiMap()

+ * @param keyMetaType the type K + * @param valueMetaType the type V + */ public QMultiMap(QMetaType keyMetaType, QMetaType.Type valueMetaType) { this(keyMetaType, new QMetaType(valueMetaType)); } + /** + * Creating a container with given key and value type. + *

See QMultiMap::QMultiMap()

+ * @param keyMetaType the type K + * @param valueMetaType the type V + */ public QMultiMap(QMetaType.Type keyMetaType, QMetaType.Type valueMetaType) { this(new QMetaType(keyMetaType), new QMetaType(valueMetaType)); } + /** + * Creating a container with given key and value type. + *

See QMultiMap::QMultiMap()

+ * @param keyType the type K + * @param valueType the type V + */ public QMultiMap(Class keyType, Class valueType) { super(null); QMetaType keyMetaType = QMetaType.fromType(keyType); QMetaType valueMetaType = QMetaType.fromType(valueType); - if(keyMetaType.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be key type of QMultiMap."); - if(keyMetaType.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be key type of QMultiMap."); - if(valueMetaType.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be value type of QMultiMap."); - if(valueMetaType.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be value type of QMultiMap."); initialize(keyType, QtJambi_LibraryUtilities.internal.nativeId(keyMetaType), valueType, QtJambi_LibraryUtilities.internal.nativeId(valueMetaType), null); } + /** + * Creating a container with given content. + *

See QMultiMap::QMultiMap(const QMap<Key, T> &)

+ * @param other map + */ public QMultiMap(Map> other) { super(null); QPair metaTypes = findMapMetaType(Objects.requireNonNull(other)); - if(metaTypes.first.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be key type of QMultiMap."); - if(metaTypes.first.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be key type of QMultiMap."); - if(metaTypes.second.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be value type of QMultiMap."); - if(metaTypes.second.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be value type of QMultiMap."); initialize(metaTypes.first.javaType(), QtJambi_LibraryUtilities.internal.nativeId(metaTypes.first), metaTypes.second.javaType(), QtJambi_LibraryUtilities.internal.nativeId(metaTypes.second), other); } + /** + * Creating a container with given key and value type. + *

See QMultiMap::QMultiMap()

+ * @param keyType the type K + * @param valueMetaType the type V + */ public QMultiMap(Class keyType, QMetaType valueMetaType) { super(null); QMetaType keyMetaType = QMetaType.fromType(keyType); - if(keyMetaType.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be key type of QMultiMap."); - if(keyMetaType.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be key type of QMultiMap."); - if(valueMetaType.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be value type of QMultiMap."); - if(valueMetaType.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be value type of QMultiMap."); initialize(keyType, QtJambi_LibraryUtilities.internal.nativeId(keyMetaType), valueMetaType.javaType(), QtJambi_LibraryUtilities.internal.nativeId(valueMetaType), null); } + /** + * Creating a container with given key and value type. + *

See QMultiMap::QMultiMap()

+ * @param keyMetaType the type K + * @param valueType the type V + */ public QMultiMap(QMetaType keyMetaType, Class valueType) { super(null); QMetaType valueMetaType = QMetaType.fromType(valueType); - if(keyMetaType.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be key type of QMultiMap."); - if(keyMetaType.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be key type of QMultiMap."); - if(valueMetaType.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be value type of QMultiMap."); - if(valueMetaType.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be value type of QMultiMap."); initialize(keyMetaType.javaType(), QtJambi_LibraryUtilities.internal.nativeId(keyMetaType), valueMetaType.javaType(), QtJambi_LibraryUtilities.internal.nativeId(valueMetaType), null); } + /** + * Creating a container with given key and value type. + *

See QMultiMap::QMultiMap()

+ * @param keyMetaType the type K + * @param valueMetaType the type V + */ public QMultiMap(QMetaType keyMetaType, QMetaType valueMetaType) { super(null); - if(keyMetaType.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be key type of QMultiMap."); - if(keyMetaType.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be key type of QMultiMap."); - if(valueMetaType.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be value type of QMultiMap."); - if(valueMetaType.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be value type of QMultiMap."); initialize(keyMetaType.javaType(), QtJambi_LibraryUtilities.internal.nativeId(keyMetaType), valueMetaType.javaType(), QtJambi_LibraryUtilities.internal.nativeId(valueMetaType), null); } @QtUninvokable private native void initialize(Class keyType, long keyMetaType, Class valueType, long valueMetaType, Map> other); + /** + * Creates and returns a copy of this object. + *

See QMultiMap::QMultiMap(const QMultiMap<Key, T> &)

+ */ @Override public QMultiMap clone(){ return new QMultiMap<>(this); diff --git a/src/java/modules/qtjambi/main/io/qt/core/QSequentialConstIterator.java b/src/java/modules/qtjambi/main/io/qt/core/QSequentialConstIterator.java index de82d55f..d4cf6c85 100644 --- a/src/java/modules/qtjambi/main/io/qt/core/QSequentialConstIterator.java +++ b/src/java/modules/qtjambi/main/io/qt/core/QSequentialConstIterator.java @@ -39,6 +39,21 @@ import io.qt.QtUninvokable; import io.qt.internal.AbstractSequentialConstIterator; +/** + *

Java-iterable wrapper for Qt's constant iterator types: + *

+ *

+ * @param value type + * @see QList#constBegin() + * @see QList#constEnd() + * @see QSet#constBegin() + * @see QSet#constEnd() + * @see #iterator() + */ @SuppressWarnings("deprecation") public class QSequentialConstIterator extends io.qt.internal.AbstractSequentialConstIterator implements java.lang.Iterable, QIterator { @@ -54,6 +69,9 @@ public class QSequentialConstIterator extends io.qt.internal.AbstractSequenti @QtUninvokable static native boolean canLess(long __this__nativeId); + /** + * Returns the current item's value. + */ @QtUninvokable protected final T val() { return value(QtJambi_LibraryUtilities.internal.nativeId(this)); @@ -61,6 +79,9 @@ protected final T val() { @QtUninvokable static native T value(long __this__nativeId); + /** + * Advances the iterator to the next item in the container. + */ @QtUninvokable protected final void increment() { increment(QtJambi_LibraryUtilities.internal.nativeId(this)); @@ -68,6 +89,9 @@ protected final void increment() { @QtUninvokable static native void increment(long __this__nativeId); + /** + * Advances the iterator to the previous item in the container. + */ @QtUninvokable protected final void decrement() { decrement(QtJambi_LibraryUtilities.internal.nativeId(this)); @@ -82,6 +106,9 @@ private boolean lessThan(AbstractSequentialConstIterator other) { @QtUninvokable static native boolean lessThan(long __this__nativeId, long other); + /** + * Returns true if other points to the same item as this iterator; otherwise returns false. + */ @QtUninvokable protected boolean equals(AbstractSequentialConstIterator o) { return operator_equal(QtJambi_LibraryUtilities.internal.nativeId(this), QtJambi_LibraryUtilities.internal.nativeId(o)); @@ -89,6 +116,9 @@ protected boolean equals(AbstractSequentialConstIterator o) { @QtUninvokable static native boolean operator_equal(long __this__nativeId, long o); + /** + * {@inheritDoc} + */ @Override @QtUninvokable public boolean equals(Object other) { @@ -113,23 +143,36 @@ boolean isValid() { return !equals(end); } + /** + * {@inheritDoc} + */ @QtUninvokable public final Iterator iterator(){ return toJavaIterator(); } + /** + * {@inheritDoc} + */ @QtUninvokable public final java.util.Iterator descendingIterator() { return toJavaDescendingIterator(); } + /** + * Returns the value at iterator's position in the container or emptiness in case of end. + */ @QtUninvokable public final Optional value() { return !isValid() ? Optional.empty() : Optional.ofNullable(val()); } + /** + * Returns the current item's value if item is valid + * or throws NoSuchElementException otherwise. + */ @QtUninvokable - protected final T checkedValue() { + protected final T checkedValue() throws NoSuchElementException { if(isValid()) { return val(); }else { diff --git a/src/java/modules/qtjambi/main/io/qt/core/QSequentialIterator.java b/src/java/modules/qtjambi/main/io/qt/core/QSequentialIterator.java index b60e69be..1534a728 100644 --- a/src/java/modules/qtjambi/main/io/qt/core/QSequentialIterator.java +++ b/src/java/modules/qtjambi/main/io/qt/core/QSequentialIterator.java @@ -34,6 +34,17 @@ import io.qt.QtUninvokable; import io.qt.internal.AbstractSequentialIterator; +/** + *

Java-iterable wrapper for Qt's iterator types: + *

+ *

+ * @param value type + * @see QList#begin() + * @see QList#end() + */ public final class QSequentialIterator extends QSequentialConstIterator implements AbstractSequentialIterator { @NativeAccess @@ -41,6 +52,10 @@ private QSequentialIterator(QtObject owner) { super(owner); } + /** + * Set the value at iterator's position in the container. + * @param newValue the new value + */ @QtUninvokable public final boolean setValue(T newValue) { if(!isValid()) diff --git a/src/java/modules/qtjambi/main/io/qt/core/QSet.java b/src/java/modules/qtjambi/main/io/qt/core/QSet.java index 28c77689..9e0cee5d 100644 --- a/src/java/modules/qtjambi/main/io/qt/core/QSet.java +++ b/src/java/modules/qtjambi/main/io/qt/core/QSet.java @@ -49,53 +49,62 @@ public class QSet extends io.qt.internal.AbstractSequentialContainer imple QtJambi_LibraryUtilities.initialize(); } + /** + * Constructor for internal use only. + * @param p expected to be null. + */ @NativeAccess protected QSet(QPrivateConstructor p) { super(p); } + /** + * Creating a container with given element type. + *

See QSet::QSet()

+ * @param elementType the type T + */ public QSet(Class elementType) { super(null); QMetaType metaType = QMetaType.fromType(elementType); - if(metaType.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be type of QSet."); - if(metaType.id()==QMetaType.Type.QVariant.value()) - throw new IllegalArgumentException("QVariant cannot be type of QSet."); - if(metaType.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be type of QSet."); initialize(elementType, QtJambi_LibraryUtilities.internal.nativeId(metaType), null); } + /** + * Creating a container with given element type. + *

See QSet::QSet()

+ * @param metaType the type T + */ public QSet(QMetaType.Type metaType) { this(new QMetaType(metaType)); } + /** + * Creating a container with given element type. + *

See QSet::QSet()

+ * @param metaType the type T + */ public QSet(QMetaType metaType) { super(null); - if(metaType.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be type of QSet."); - if(metaType.id()==QMetaType.Type.QVariant.value()) - throw new IllegalArgumentException("QVariant cannot be type of QSet."); - if(metaType.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be type of QSet."); initialize(metaType.javaType(), QtJambi_LibraryUtilities.internal.nativeId(metaType), null); } + /** + * Creating a container with given content. + *

See QSet::QSet(const QSet<T> &)

+ * @param other container + */ public QSet(Collection other) { super(null); QMetaType metaType = QList.findElementMetaType(Objects.requireNonNull(other)); - if(metaType==null || metaType.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be type of QSet."); - if(metaType.id()==QMetaType.Type.QVariant.value()) - throw new IllegalArgumentException("QVariant cannot be type of QSet."); - if(metaType.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be type of QSet."); initialize(metaType.javaType(), QtJambi_LibraryUtilities.internal.nativeId(metaType), other); } @QtUninvokable private native void initialize(Class elementType, long elementMetaType, Collection other); + /** + * Creates and returns a copy of this object. + */ @Override public QSet clone(){ return new QSet<>(this); @@ -322,10 +331,6 @@ final QMetaType elementMetaType() { @SafeVarargs public static QSet of(T element0, T...elements) { QMetaType metaType = QList.findElementMetaType(element0, elements); - if(metaType==null || metaType.id()==0) - throw new IllegalArgumentException("QMetaType::UnknownType cannot be type of QList."); - if(metaType.id()==QMetaType.Type.Void.value()) - throw new IllegalArgumentException("void cannot be type of QList."); QSet result = new QSet<>(metaType); result.add(element0); for (T t : elements) { diff --git a/src/java/modules/qtjambi/main/io/qt/core/QStaticMemberSignals.java b/src/java/modules/qtjambi/main/io/qt/core/QStaticMemberSignals.java index bd3a53f5..890877f8 100644 --- a/src/java/modules/qtjambi/main/io/qt/core/QStaticMemberSignals.java +++ b/src/java/modules/qtjambi/main/io/qt/core/QStaticMemberSignals.java @@ -60,6 +60,10 @@ import io.qt.core.QMetaObject.AbstractSignal9Default7; import io.qt.core.QMetaObject.AbstractSignal9Default8; +/** + * QStaticMemberSignals is a namespace containing signal types to be used as static member signals. + * Static signals are never realized as Qt's meta object signals but have a lightweight Java implementation. + */ public final class QStaticMemberSignals { private QStaticMemberSignals(){} diff --git a/src/java/modules/qtjambi/main/io/qt/internal/LibraryUtility.java b/src/java/modules/qtjambi/main/io/qt/internal/LibraryUtility.java index 3196e692..74d8c76a 100644 --- a/src/java/modules/qtjambi/main/io/qt/internal/LibraryUtility.java +++ b/src/java/modules/qtjambi/main/io/qt/internal/LibraryUtility.java @@ -36,6 +36,7 @@ import java.net.MalformedURLException; import java.net.URISyntaxException; import java.net.URL; +import java.nio.ByteOrder; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.StandardCopyOption; @@ -72,6 +73,7 @@ import io.qt.QLibraryNotLoadedError; import io.qt.QNoSuchSlotException; import io.qt.QtUninvokable; +import io.qt.QtUtilities; import io.qt.QtUtilities.LibraryRequirementMode; import io.qt.core.QDeclarableSignals; import io.qt.core.QPair; @@ -848,6 +850,7 @@ private static Architecture decideArchitecture() { String arch = System.getProperty("os.arch").toLowerCase(); switch(arch) { case "arm": + case "armv": case "arm32": return Architecture.arm; case "arm64": @@ -857,6 +860,9 @@ private static Architecture decideArchitecture() { case "x64": case "amd64": return Architecture.x86_64; + case "i386": + case "x86": + return Architecture.x86; default: if(arch.startsWith("arm-")) return Architecture.arm; @@ -1082,8 +1088,115 @@ static void loadLibrary(String library) { loadNativeLibrary(Object.class, getLibraryAvailability(library, libraryPlatformName, Collections.emptyList()), null); } - static File loadQtJambiLibrary() { - return loadQtJambiLibrary(LibraryUtility.class, null, "QtJambi", QtJambi_LibraryUtilities.qtMajorVersion, QtJambi_LibraryUtilities.qtMinorVersion, QtJambi_LibraryUtilities.qtJambiPatch); + static void loadQtJambiLibrary() { + try{ + loadSystemLibraries(); + loadUtilityLibrary("icudata", LibraryUtility.ICU_VERSION, LibraryRequirementMode.Optional); + loadUtilityLibrary("icuuc", LibraryUtility.ICU_VERSION, LibraryRequirementMode.Optional); + loadUtilityLibrary("icui18n", LibraryUtility.ICU_VERSION, LibraryRequirementMode.Optional); + } catch (Throwable e) { + java.util.logging.Logger.getLogger("io.qt.internal").log(java.util.logging.Level.SEVERE, "Error while loading system library", e); + } + Availability availability = getLibraryAvailability("Qt", "Core", LIBINFIX, null, configuration, QtJambi_LibraryUtilities.qtMajorVersion, QtJambi_LibraryUtilities.qtMinorVersion); + if(!availability.isAvailable()) { + if(configuration==LibraryBundle.Configuration.Release) { + // try to run qtjambi with debug libraries instead + configuration=LibraryBundle.Configuration.Debug; + Availability _availability = getLibraryAvailability("Qt", "Core", LIBINFIX, null, configuration, QtJambi_LibraryUtilities.qtMajorVersion, QtJambi_LibraryUtilities.qtMinorVersion); + if(_availability.isAvailable()) + availability = _availability; + }else { + if(dontUseQtFrameworks==null) { + dontUseQtFrameworks = Boolean.TRUE; + Availability _availability = getLibraryAvailability("Qt", "Core", LIBINFIX, null, configuration, QtJambi_LibraryUtilities.qtMajorVersion, QtJambi_LibraryUtilities.qtMinorVersion); + if(!_availability.isAvailable()) { + configuration=LibraryBundle.Configuration.Debug; + _availability = getLibraryAvailability("Qt", "Core", LIBINFIX, null, configuration, QtJambi_LibraryUtilities.qtMajorVersion, QtJambi_LibraryUtilities.qtMinorVersion); + if(_availability.isAvailable()) + availability = _availability; + } + }else { + if(!isMinGWBuilt && operatingSystem==OperatingSystem.Windows) { + Availability stdCAvailability = getLibraryAvailability(null, "libstdc++-6", null, null, LibraryBundle.Configuration.Release, null); + if(stdCAvailability.entry!=null){ + isMinGWBuilt = true; + }else if(stdCAvailability.file!=null){ + isMinGWBuilt = new File(stdCAvailability.file.getParentFile(), "Qt"+QtJambi_LibraryUtilities.qtMajorVersion+"Core.dll").isFile(); + } + if(isMinGWBuilt) { + availability = getLibraryAvailability("Qt", "Core", LIBINFIX, null, configuration, QtJambi_LibraryUtilities.qtMajorVersion, QtJambi_LibraryUtilities.qtMinorVersion); + } + } + } + } + } + java.io.File coreLib; + try{ + coreLib = loadNativeLibrary(Object.class, availability, QtJambi_LibraryUtilities.qtMajorVersion, QtJambi_LibraryUtilities.qtMinorVersion); + if(coreLib!=null) + qtLibraryPath = coreLib.getParentFile().getAbsolutePath(); + } catch(UnsatisfiedLinkError t) { + LibraryUtility.analyzeUnsatisfiedLinkError(t, availability.file, true); + throw t; + }finally { + if(dontUseQtFrameworks==null) { + dontUseQtFrameworks = Boolean.FALSE; + } + } + try{ + java.io.File qtjambiLib = loadQtJambiLibrary(LibraryUtility.class, null, "QtJambi", QtJambi_LibraryUtilities.qtMajorVersion, QtJambi_LibraryUtilities.qtMinorVersion, QtJambi_LibraryUtilities.qtJambiPatch); + if(LibraryUtility.operatingSystem!=LibraryUtility.OperatingSystem.Android) { + List paths = new ArrayList<>(); + String path; + switch(LibraryUtility.operatingSystem) { + case MacOS: + path = QtUtilities.getenv("DYLD_LIBRARY_PATH"); + String path2 = QtUtilities.getenv("DYLD_FRAMEWORK_PATH"); + List paths2 = new ArrayList<>(); + paths2.add(qtjambiLib.getParentFile().getAbsolutePath()); + if(path2!=null && !path2.isEmpty()) { + for(String p : path2.split("\\"+java.io.File.pathSeparator)) { + if(!paths2.contains(p)) + paths2.add(p); + } + } + path2 = String.join(java.io.File.pathSeparator, paths2); + QtUtilities.putenv("DYLD_FRAMEWORK_PATH", path2); + break; + case Windows: + path = QtUtilities.getenv("PATH"); + break; + default: + path = QtUtilities.getenv("LD_LIBRARY_PATH"); + break; + } + if(LibraryUtility.operatingSystem!=LibraryUtility.OperatingSystem.MacOS) + paths.add(coreLib.getParentFile().getAbsolutePath()); + if(!paths.contains(qtjambiLib.getParentFile().getAbsolutePath())) + paths.add(qtjambiLib.getParentFile().getAbsolutePath()); + if(path!=null && !path.isEmpty()) { + for(String p : path.split("\\"+java.io.File.pathSeparator)) { + if(!paths.contains(p)) + paths.add(p); + } + } + path = String.join(java.io.File.pathSeparator, paths); + switch(LibraryUtility.operatingSystem) { + case MacOS: + QtUtilities.putenv("DYLD_LIBRARY_PATH", path); + break; + case Windows: + QtUtilities.putenv("PATH", path); + break; + default: + QtUtilities.putenv("LD_LIBRARY_PATH", path); + break; + } + } + } catch(UnsatisfiedLinkError t) { + LibraryUtility.analyzeUnsatisfiedLinkError(t, coreLib, false); + throw t; + } } static void loadQtJambiLibrary(Class callerClass, String library) { @@ -1278,60 +1391,6 @@ static void loadUtilityLibrary(String library, String version, LibraryRequiremen loadNativeLibrary(Object.class, availability, null); } - static File loadQtCore() { - try{ - loadSystemLibraries(); - loadUtilityLibrary("icudata", LibraryUtility.ICU_VERSION, LibraryRequirementMode.Optional); - loadUtilityLibrary("icuuc", LibraryUtility.ICU_VERSION, LibraryRequirementMode.Optional); - loadUtilityLibrary("icui18n", LibraryUtility.ICU_VERSION, LibraryRequirementMode.Optional); - } catch (Throwable e) { - java.util.logging.Logger.getLogger("io.qt.internal").log(java.util.logging.Level.SEVERE, "Error while loading system library", e); - } - Availability availability = getLibraryAvailability("Qt", "Core", LIBINFIX, null, configuration, QtJambi_LibraryUtilities.qtMajorVersion, QtJambi_LibraryUtilities.qtMinorVersion); - if(!availability.isAvailable()) { - if(configuration==LibraryBundle.Configuration.Release) { - // try to run qtjambi with debug libraries instead - configuration=LibraryBundle.Configuration.Debug; - Availability _availability = getLibraryAvailability("Qt", "Core", LIBINFIX, null, configuration, QtJambi_LibraryUtilities.qtMajorVersion, QtJambi_LibraryUtilities.qtMinorVersion); - if(_availability.isAvailable()) - availability = _availability; - }else { - if(dontUseQtFrameworks==null) { - dontUseQtFrameworks = Boolean.TRUE; - Availability _availability = getLibraryAvailability("Qt", "Core", LIBINFIX, null, configuration, QtJambi_LibraryUtilities.qtMajorVersion, QtJambi_LibraryUtilities.qtMinorVersion); - if(!_availability.isAvailable()) { - configuration=LibraryBundle.Configuration.Debug; - _availability = getLibraryAvailability("Qt", "Core", LIBINFIX, null, configuration, QtJambi_LibraryUtilities.qtMajorVersion, QtJambi_LibraryUtilities.qtMinorVersion); - if(_availability.isAvailable()) - availability = _availability; - } - }else { - if(!isMinGWBuilt && operatingSystem==OperatingSystem.Windows) { - Availability stdCAvailability = getLibraryAvailability(null, "libstdc++-6", null, null, LibraryBundle.Configuration.Release, null); - if(stdCAvailability.entry!=null){ - isMinGWBuilt = true; - }else if(stdCAvailability.file!=null){ - isMinGWBuilt = new File(stdCAvailability.file.getParentFile(), "Qt"+QtJambi_LibraryUtilities.qtMajorVersion+"Core.dll").isFile(); - } - if(isMinGWBuilt) { - availability = getLibraryAvailability("Qt", "Core", LIBINFIX, null, configuration, QtJambi_LibraryUtilities.qtMajorVersion, QtJambi_LibraryUtilities.qtMinorVersion); - } - } - } - } - } - try{ - File lib = loadNativeLibrary(Object.class, availability, QtJambi_LibraryUtilities.qtMajorVersion, QtJambi_LibraryUtilities.qtMinorVersion); - if(lib!=null) - qtLibraryPath = lib.getParentFile().getAbsolutePath(); - return lib; - }finally { - if(dontUseQtFrameworks==null) { - dontUseQtFrameworks = Boolean.FALSE; - } - } - } - private static LibVersion getLibVersion(Class callerClass) { return qtJambiVersionsByClass.computeIfAbsent(callerClass, cls -> { if(callerClass.getSimpleName().equals("QtJambi_LibraryUtilities")) { @@ -2534,9 +2593,17 @@ private static int findSequence(int offset, byte[] array, byte[] sequence) { return -1; } - static void analyzeUnsatisfiedLinkError(UnsatisfiedLinkError t, java.io.File coreLib) { - String qtLibraryBuild = null; - String qtjambiLibraryBuild = null; + private static void analyzeUnsatisfiedLinkError(UnsatisfiedLinkError t, java.io.File coreLib, boolean atCoreLoad) { + final String architecture; + if(LibraryUtility.architecture==LibraryUtility.Architecture.x86) { + architecture = "i386-"+ByteOrder.nativeOrder().toString().toLowerCase(); + }else { + architecture = LibraryUtility.architecture.name()+"-"+ByteOrder.nativeOrder().toString().toLowerCase(); + } + final boolean canUniversalBuild = LibraryUtility.operatingSystem==LibraryUtility.OperatingSystem.MacOS + || LibraryUtility.operatingSystem==LibraryUtility.OperatingSystem.IOS; + final List qtLibraryBuilds = new ArrayList<>(); + final List qtjambiLibraryBuilds = new ArrayList<>(); try { byte[] coredata = Files.readAllBytes(coreLib.toPath()); int idx = 0; @@ -2577,14 +2644,16 @@ static void analyzeUnsatisfiedLinkError(UnsatisfiedLinkError t, java.io.File cor break; } } - qtLibraryBuild = new String(os.toByteArray(), StandardCharsets.US_ASCII); - if(qtLibraryBuild.contains("build; by")) - break; - else - idx += 5; + String qtLibraryBuild = new String(os.toByteArray(), StandardCharsets.US_ASCII); + if(qtLibraryBuild.contains("build; by")) { + qtLibraryBuilds.add(qtLibraryBuild); + if(!canUniversalBuild) + break; + } + idx += 5; } }catch(Throwable t2){} - { + if(!atCoreLoad){ Availability availability = getQtJambiLibraryAvailability(null, "QtJambi", null, null, configuration, QtJambi_LibraryUtilities.qtMajorVersion, QtJambi_LibraryUtilities.qtMinorVersion, QtJambi_LibraryUtilities.qtJambiPatch); if(availability.file!=null) { try { @@ -2627,30 +2696,73 @@ static void analyzeUnsatisfiedLinkError(UnsatisfiedLinkError t, java.io.File cor break; } } - qtjambiLibraryBuild = new String(os.toByteArray(), StandardCharsets.US_ASCII); - if(qtjambiLibraryBuild.contains("build; by")) - break; - else - idx += 10; + String qtjambiLibraryBuild = new String(os.toByteArray(), StandardCharsets.US_ASCII); + if(qtjambiLibraryBuild.contains("build; by")) { + qtjambiLibraryBuilds.add(qtjambiLibraryBuild); + if(!canUniversalBuild) + break; + } + idx += 10; } }catch(Throwable t2){} } + }else { // error when loading QtCore: + String qtLibraryBuild = null; + switch(qtLibraryBuilds.size()) { + case 0: throw t; + case 1: + qtLibraryBuild = qtLibraryBuilds.get(0); + if(qtLibraryBuild.contains(architecture)) { + throw t; + } + throw new LinkageError("Cannot load " + qtLibraryBuild + " on " + architecture + " architecture.", t); + default: + for(String s : qtLibraryBuilds) { + if(s.contains(architecture)) { + qtLibraryBuild = s; + break; + } + } + if(qtLibraryBuild==null) { + throw new LinkageError("Cannot load one of " + qtLibraryBuilds + " on " + architecture + " architecture.", t); + }else { + throw new LinkageError("Cannot load " + qtLibraryBuild + " on " + architecture + " architecture.", t); + } + } } - if(qtLibraryBuild!=null && qtjambiLibraryBuild!=null) { + if(!qtLibraryBuilds.isEmpty() && !qtjambiLibraryBuilds.isEmpty()) { + String qtLibraryBuild = qtLibraryBuilds.get(0); + String qtjambiLibraryBuild = qtjambiLibraryBuilds.get(0); switch(LibraryUtility.operatingSystem) { case Windows: - if(LibraryUtility.architecture==Architecture.x86_64) { + if(LibraryUtility.architecture==Architecture.x86_64 && qtjambiLibraryBuild.contains(architecture)) { if(qtjambiLibraryBuild.contains("MSVC") && qtLibraryBuild.contains("GCC")) { - throw new LinkageError("Cannot run " + qtjambiLibraryBuild + " with " + qtLibraryBuild + ". Please install and use Qt (MSVC 2019 x64) instead.", t); + throw new LinkageError("Cannot run " + qtjambiLibraryBuild + " with " + qtLibraryBuild + ". Please install and use Qt (MSVC x64) instead.", t); }else if(qtjambiLibraryBuild.contains("GCC") && qtLibraryBuild.contains("MSVC")){ throw new LinkageError("Cannot run " + qtjambiLibraryBuild + " with " + qtLibraryBuild + ". Please install and use Qt (MinGW x64) instead.", t); } + }else if(LibraryUtility.architecture==Architecture.x86 && qtjambiLibraryBuild.contains(architecture)) { + if(qtjambiLibraryBuild.contains("MSVC") && qtLibraryBuild.contains("GCC")) { + throw new LinkageError("Cannot run " + qtjambiLibraryBuild + " with " + qtLibraryBuild + ". Please install and use Qt (MSVC x86) instead.", t); + }else if(qtjambiLibraryBuild.contains("GCC") && qtLibraryBuild.contains("MSVC")){ + throw new LinkageError("Cannot run " + qtjambiLibraryBuild + " with " + qtLibraryBuild + ". Please install and use Qt (MinGW x86) instead.", t); + } + } + default: + if(qtLibraryBuilds.size()==1) { + if(qtjambiLibraryBuilds.size()==1) { + throw new LinkageError("Cannot run " + qtjambiLibraryBuild + " with " + qtLibraryBuild + ".", t); + }else { + throw new LinkageError("Cannot run one of " + qtjambiLibraryBuilds + " with " + qtLibraryBuild + ".", t); + } + }else { + if(qtjambiLibraryBuilds.size()==1) { + throw new LinkageError("Cannot run " + qtjambiLibraryBuild + " with one of " + qtLibraryBuilds + ".", t); + }else { + throw new LinkageError("Cannot run one of " + qtjambiLibraryBuilds + " with one of " + qtLibraryBuilds + ".", t); + } } - break; - default: - break; } - throw new LinkageError("Cannot run " + qtjambiLibraryBuild + " with " + qtLibraryBuild + ".", t); }else { switch(LibraryUtility.operatingSystem) { case MacOS: @@ -2689,7 +2801,7 @@ static void analyzeUnsatisfiedLinkError(UnsatisfiedLinkError t, java.io.File cor } } if(new java.io.File(coreLib.getParentFile(), "libstdc++-6.dll").exists() || LibraryUtility.isMinGWBuilt()) { - throw new LinkageError("Cannot combine msvc-based QtJambi with mingw-based Qt library. Please install and use Qt (MSVC 2019 x64) instead.", t); + throw new LinkageError("Cannot combine msvc-based QtJambi with mingw-based Qt library. Please install and use Qt (MSVC x64) instead.", t); }else { throw new LinkageError("Cannot combine mingw-based QtJambi with msvc-based Qt library. Please install and use Qt (MinGW x64) instead.", t); } diff --git a/src/java/modules/qtjambi/main/io/qt/internal/MetaObjectUtility.java b/src/java/modules/qtjambi/main/io/qt/internal/MetaObjectUtility.java index 5ea5c9ee..1f09d1df 100644 --- a/src/java/modules/qtjambi/main/io/qt/internal/MetaObjectUtility.java +++ b/src/java/modules/qtjambi/main/io/qt/internal/MetaObjectUtility.java @@ -646,7 +646,7 @@ public ParameterInfo(io.qt.core.QMetaType.Type type) { addedMethodSignatures.add(methodSignature); allConstructorParameterInfos.add(constructorParameterInfos); metaObjectData.constructors.add(constructor); - metaObjectData.constructorMetaTypes.add(new int[parameterTypes.length+1]); + metaObjectData.constructorMetaTypes.add(new MetaObjectData.MetaTypeInfo[parameterTypes.length+1]); metaObjectData.hasStaticMembers = true; } } @@ -882,7 +882,7 @@ public ParameterInfo(io.qt.core.QMetaType.Type type) { methodFlags.put(declaredMethod, MethodFlags.MethodSlot); } } - metaObjectData.methodMetaTypes.add(new int[declaredMethod.getParameterCount()+1]); + metaObjectData.methodMetaTypes.add(new MetaObjectData.MetaTypeInfo[declaredMethod.getParameterCount()+1]); } } @@ -1296,7 +1296,7 @@ else if (Modifier.isPublic(constructor.getModifiers())) for (int i = 0; i < metaObjectData.methods.size(); i++) { Method method = metaObjectData.methods.get(i); - int[] metaTypes = metaObjectData.methodMetaTypes.get(i); + MetaObjectData.MetaTypeInfo[] metaTypes = metaObjectData.methodMetaTypes.get(i); List methodParameterInfos = allMethodParameterInfos.get(i); // slot/method: parameters int METHOD_PARAMETER_INDEX = paramIndexOfMethods.get(method); @@ -1308,11 +1308,11 @@ else if (Modifier.isPublic(constructor.getModifiers())) if(info.type==null){ metaObjectData.intData.add(0x80000000 | metaObjectData.addStringDataAndReturnIndex(info.typeName)); metaObjectData.metaTypes.add(info.metaTypeId); - metaTypes[0] = info.metaTypeId; + metaTypes[0] = new MetaObjectData.MetaTypeInfo(info.metaTypeId, info.typeName); }else{ metaObjectData.intData.add(info.type.value()); metaObjectData.metaTypes.add(info.type.value()); - metaTypes[0] = info.type.value(); + metaTypes[0] = new MetaObjectData.MetaTypeInfo(info.type.value(), info.typeName); } intdataComments.add("slot["+i+"].returnType"); for (int j = 1; j < methodParameterInfos.size(); j++) { @@ -1320,11 +1320,11 @@ else if (Modifier.isPublic(constructor.getModifiers())) if(info.type==null){ metaObjectData.intData.add(0x80000000 | metaObjectData.addStringDataAndReturnIndex(info.typeName)); metaObjectData.metaTypes.add(info.metaTypeId); - metaTypes[j] = info.metaTypeId; + metaTypes[j] = new MetaObjectData.MetaTypeInfo(info.metaTypeId, info.typeName); }else{ metaObjectData.intData.add(info.type.value()); metaObjectData.metaTypes.add(info.type.value()); - metaTypes[j] = info.type.value(); + metaTypes[j] = new MetaObjectData.MetaTypeInfo(info.type.value(), info.typeName); } intdataComments.add("slot["+i+"]: parameter["+(j-1)+"].arg"); } @@ -1342,8 +1342,8 @@ else if (Modifier.isPublic(constructor.getModifiers())) for (int i = 0; i < metaObjectData.constructors.size(); i++) { Constructor constructor = metaObjectData.constructors.get(i); List constructorParameterInfos = allConstructorParameterInfos.get(i); - int[] metaTypes = metaObjectData.constructorMetaTypes.get(i); - metaTypes[0] = QMetaType.Type.UnknownType.value(); + MetaObjectData.MetaTypeInfo[] metaTypes = metaObjectData.constructorMetaTypes.get(i); + metaTypes[0] = new MetaObjectData.MetaTypeInfo(QMetaType.Type.UnknownType.value(), null); // constructors: parameters int METHOD_PARAMETER_INDEX = paramIndexOfMethods.get(constructor); metaObjectData.intData.set(METHOD_PARAMETER_INDEX, metaObjectData.intData.size()); @@ -1357,11 +1357,11 @@ else if (Modifier.isPublic(constructor.getModifiers())) if(info.type==null){ metaObjectData.intData.add(0x80000000 | metaObjectData.addStringDataAndReturnIndex(info.typeName)); metaObjectData.metaTypes.add(info.metaTypeId); - metaTypes[j+1] = info.metaTypeId; + metaTypes[j+1] = new MetaObjectData.MetaTypeInfo(info.metaTypeId, info.typeName); }else{ metaObjectData.intData.add(info.type.value()); metaObjectData.metaTypes.add(info.type.value()); - metaTypes[j+1] = info.type.value(); + metaTypes[j+1] = new MetaObjectData.MetaTypeInfo(info.type.value(), info.typeName); } intdataComments.add("constructor["+i+"]: parameter["+(j)+"].arg"); } @@ -1524,6 +1524,9 @@ else if (Modifier.isPublic(constructor.getModifiers())) // Type (need to special case flags and enums) int metaTypeId = 0; String typeName; + if(isReference) { + throw new IllegalStateException("Type of property "+ clazz.getTypeName()+"."+propertyName +" must not be reference type"); + } if(metaTypeDecl!=null) { if(metaTypeDecl.id()!=0) { metaTypeId = metaTypeDecl.id(); @@ -1686,11 +1689,11 @@ else if (Modifier.isPublic(constructor.getModifiers())) } metaObjectData.intData.add(0x80000000 | metaObjectData.addStringDataAndReturnIndex(typeName)); metaObjectData.metaTypes.set(i, metaTypeId); - metaObjectData.propertyMetaTypes.add(new int[]{metaTypeId,metaTypeId}); + metaObjectData.propertyMetaTypes.add(new MetaObjectData.MetaTypeInfo[]{new MetaObjectData.MetaTypeInfo(metaTypeId, typeName),new MetaObjectData.MetaTypeInfo(metaTypeId, typeName)}); }else{ metaObjectData.intData.add(type.value()); metaObjectData.metaTypes.set(i, type.value()); - metaObjectData.propertyMetaTypes.add(new int[]{type.value(),type.value()}); + metaObjectData.propertyMetaTypes.add(new MetaObjectData.MetaTypeInfo[]{new MetaObjectData.MetaTypeInfo(type.value(), typeName),new MetaObjectData.MetaTypeInfo(type.value(), typeName)}); } metaObjectData.propertyClassTypes.add(propertyType); intdataComments.add("property["+i+"].type"); @@ -2455,6 +2458,16 @@ public static void setQmlClassInfoGeneratorFunction( @NativeAccess class MetaObjectData { + @NativeAccess + static class MetaTypeInfo{ + final @NativeAccess int metaTypeId; + final @NativeAccess String typeName; + MetaTypeInfo(int metaTypeId, String typeName) { + this.metaTypeId = metaTypeId; + this.typeName = typeName; + } + } + @NativeAccess static class IntArray{ @NativeAccess @@ -2518,9 +2531,9 @@ String getStringData(int index) { final @NativeAccess List signalInfos = new ArrayList<>(); final @NativeAccess List methods = new ArrayList<>(); - final @NativeAccess List methodMetaTypes = new ArrayList<>(); + final @NativeAccess List methodMetaTypes = new ArrayList<>(); final @NativeAccess List> constructors = new ArrayList<>(); - final @NativeAccess List constructorMetaTypes = new ArrayList<>(); + final @NativeAccess List constructorMetaTypes = new ArrayList<>(); final @NativeAccess List propertyReaders = new ArrayList<>(); final @NativeAccess List propertyWriters = new ArrayList<>(); @@ -2534,7 +2547,7 @@ String getStringData(int index) { final @NativeAccess List propertyEditableResolvers = new ArrayList<>(); final @NativeAccess List propertyStoredResolvers = new ArrayList<>(); final @NativeAccess List propertyUserResolvers = new ArrayList<>(); - final @NativeAccess List propertyMetaTypes = new ArrayList<>(); + final @NativeAccess List propertyMetaTypes = new ArrayList<>(); final @NativeAccess List> propertyClassTypes = new ArrayList<>(); final @NativeAccess List> relatedMetaObjects = new ArrayList<>(); diff --git a/src/java/modules/qtjambi/main/io/qt/internal/SignalUtility.java b/src/java/modules/qtjambi/main/io/qt/internal/SignalUtility.java index 241a1896..9e04d2a5 100644 --- a/src/java/modules/qtjambi/main/io/qt/internal/SignalUtility.java +++ b/src/java/modules/qtjambi/main/io/qt/internal/SignalUtility.java @@ -112,6 +112,10 @@ abstract class SignalUtility { static { QtJambi_LibraryUtilities.initialize(); } + + private final static String wrapper = "Wrapper"; + private final static String qvariant = "QVariant"; + protected SignalUtility() {throw new RuntimeException();} private final static java.util.logging.Logger logger = java.util.logging.Logger.getLogger("io.qt.internal"); @@ -2585,19 +2589,21 @@ private QMetaObject.Connection addConnectionToMethod(Object receiver, QMetaMetho && signalMethod.isValid() && (checkConnectArgs = QMetaObject.checkConnectArgs(signalMethod, slot))) { boolean hasWrappers = false; - for(QByteArray ba : signalMethod.parameterTypes()) { - if(ba.startsWith("J") && ba.endsWith("Wrapper")) { - hasWrappers = true; - break; + if(isDynamic(signalMethod.enclosingMetaObject())) { + for(QByteArray ba : signalMethod.parameterTypes()) { + if(ba.startsWith((byte)'J') && ba.endsWith(wrapper)) { + hasWrappers = true; + break; + } + } + if(!hasWrappers) { + for(QByteArray ba : slot.parameterTypes()) { + if(ba.startsWith((byte)'J') && ba.endsWith(wrapper)) { + hasWrappers = true; + break; + } + } } - } - if(!hasWrappers) { - for(QByteArray ba : slot.parameterTypes()) { - if(ba.startsWith("J") && ba.endsWith("Wrapper")) { - hasWrappers = true; - break; - } - } } if(!hasWrappers) { return core.addConnectionToMethod(this, receiver, slot, connectionType); @@ -3721,14 +3727,14 @@ protected QMetaObject.Connection connect(Object receiver, String method, Qt.Conn && QMetaObject.checkConnectArgs(signalMethod, metaMethod)) { boolean hasWrappers = false; for(QByteArray ba : signalMethod.parameterTypes()) { - if((ba.startsWith("J") && ba.endsWith("Wrapper")) || ba.equals("QVariant")) { + if((ba.startsWith((byte)'J') && ba.endsWith(wrapper)) || ba.equals(qvariant)) { hasWrappers = true; break; } } if(!hasWrappers) { for(QByteArray ba : metaMethod.parameterTypes()) { - if((ba.startsWith("J") && ba.endsWith("Wrapper")) || ba.equals("QVariant")) { + if((ba.startsWith((byte)'J') && ba.endsWith(wrapper)) || ba.equals(qvariant)) { hasWrappers = true; break; } @@ -4743,120 +4749,115 @@ protected static boolean disconnectOne(QMetaObject.Connection connection) { @NativeAccess private static Method lookupSlot(Object object, String signature, Class[] requiredParameters) { - Class cls = ClassAnalyzerUtility.getClass(object); - - if (requiredParameters == null) { - int pos = signature.indexOf('('); - if (pos < 0) { - throw new RuntimeException("Wrong syntax in slot signature: '" + signature + "'"); - } - int spacePos = signature.trim().lastIndexOf(' ', pos); - if (pos > spacePos && spacePos > 0) { - throw new RuntimeException("Do not specify return type in slot signature: '" + signature + "'"); - } + Class cls = (object instanceof Class) ? (Class) object : ClassAnalyzerUtility.getClass(object); + int h = 1; + h = 31 * h + cls.hashCode(); + h = 31 * h + signature.hashCode(); + if(requiredParameters!=null) { + h = 31 * h + requiredParameters.length; + for (Class element : requiredParameters) { + h = 31 * h + (element == null ? 0 : element.hashCode()); + } + } + return lookupSlots.computeIfAbsent(h, + argumentsHashCode -> { + if (requiredParameters == null) { + int pos = signature.indexOf('('); + if (pos < 0) { + throw new RuntimeException("Wrong syntax in slot signature: '" + signature + "'"); + } + int spacePos = signature.trim().lastIndexOf(' ', pos); + if (pos > spacePos && spacePos > 0) { + throw new RuntimeException("Do not specify return type in slot signature: '" + signature + "'"); + } - String name = signature.substring(0, pos).trim(); + String name = signature.substring(0, pos).trim(); - int pos2 = signature.indexOf(')', pos); - if (pos2 < 0) { - throw new RuntimeException("Wrong syntax in slot signature: '" + signature + "'"); - } - String strTypes = signature.substring(pos + 1, pos2).trim(); + int pos2 = signature.indexOf(')', pos); + if (pos2 < 0) { + throw new RuntimeException("Wrong syntax in slot signature: '" + signature + "'"); + } + String strTypes = signature.substring(pos + 1, pos2).trim(); - String argumentTypes[] = {}; - if (!strTypes.isEmpty()) - argumentTypes = strTypes.split("\\,"); + String argumentTypes[] = {}; + if (!strTypes.isEmpty()) + argumentTypes = strTypes.split("\\,"); -// if (strTypes.length() == 0) -// argumentTypes = new String[0]; -// else -// argumentTypes = RetroTranslatorHelper.split(strTypes, ","); +// if (strTypes.length() == 0) +// argumentTypes = new String[0]; +// else +// argumentTypes = RetroTranslatorHelper.split(strTypes, ","); - for (int i = 0; i < argumentTypes.length; ++i) - argumentTypes[i] = argumentTypes[i].replace(" ", ""); + for (int i = 0; i < argumentTypes.length; ++i) + argumentTypes[i] = argumentTypes[i].replace(" ", ""); - Method result = findFunctionRecursive(cls, name, argumentTypes); - if (result == null && object instanceof Class) { - result = findFunctionRecursive((Class) object, name, argumentTypes); - } - return result; - } else { - Method result = findFunctionRecursive(cls, signature, requiredParameters); - if (result == null && object instanceof Class) { - result = findFunctionRecursive((Class) object, signature, requiredParameters); - } - return result; - } + return findFunctionRecursive(cls, name, argumentTypes); + } else { + return findFunctionRecursive(cls, signature, requiredParameters); + } + } + ); } - /** - * Generates a hash from arguments - */ - private static int argumentsHashCode(Class cls, String functionName, Object argumentTypes[]) { - return Arrays.deepHashCode(new Object[]{System.identityHashCode(cls), functionName, ClassAnalyzerUtility.getClass(argumentTypes), argumentTypes}); - } - private static Method findFunctionRecursive(Class cls, String functionName, String argumentTypes[]) { - Method result = lookupSlots.computeIfAbsent(argumentsHashCode(cls, functionName, argumentTypes), - argumentsHashCode -> { - for (Method m : cls.getDeclaredMethods()) { - boolean found; - if (!m.getName().equals(functionName)) - continue; + Method result = null; + for (Method m : cls.getDeclaredMethods()) { + boolean found; + if (!m.getName().equals(functionName)) + continue; - Class a[] = m.getParameterTypes(); - if (a.length != argumentTypes.length) - continue; + Class a[] = m.getParameterTypes(); + if (a.length != argumentTypes.length) + continue; - found = true; - for (int i = 0; i < a.length; ++i) { - String arg = a[i].getName(); + found = true; + for (int i = 0; i < a.length; ++i) { + String arg = a[i].getName(); - Class t = a[i]; + Class t = a[i]; - if (t.isArray()) { - String brackets = ""; + if (t.isArray()) { + String brackets = ""; - do { - t = t.getComponentType(); - brackets += "[]"; - } while (t.isArray()); + do { + t = t.getComponentType(); + brackets += "[]"; + } while (t.isArray()); - arg = t.getName() + brackets; - } + arg = t.getName() + brackets; + } - if (argumentTypes[i].indexOf('.') < 0) { - arg = arg.substring(arg.lastIndexOf('.') + 1); - } + if (argumentTypes[i].indexOf('.') < 0) { + arg = arg.substring(arg.lastIndexOf('.') + 1); + } - String argLenient = t.isMemberClass() ? arg.replace('$', '.') : null; - if (!arg.equals(argumentTypes[i]) - && (argLenient == null || !argLenient.equals(argumentTypes[i]))) { - if (m.isVarArgs() && argumentTypes[i].endsWith("...")) { - if (arg.endsWith("[]")) { - arg = arg.substring(0, arg.length() - 2) + "..."; - if (argLenient != null && argLenient.endsWith("[]")) { - argLenient = argLenient.substring(0, argLenient.length() - 2) + "..."; - } - } - if (!arg.equals(argumentTypes[i]) - && (argLenient == null || !argLenient.equals(argumentTypes[i]))) { - found = false; - break; - } - } else { - found = false; - break; - } + String argLenient = t.isMemberClass() ? arg.replace('$', '.') : null; + if (!arg.equals(argumentTypes[i]) + && (argLenient == null || !argLenient.equals(argumentTypes[i]))) { + if (m.isVarArgs() && argumentTypes[i].endsWith("...")) { + if (arg.endsWith("[]")) { + arg = arg.substring(0, arg.length() - 2) + "..."; + if (argLenient != null && argLenient.endsWith("[]")) { + argLenient = argLenient.substring(0, argLenient.length() - 2) + "..."; } } - - if (found) { - return m; + if (!arg.equals(argumentTypes[i]) + && (argLenient == null || !argLenient.equals(argumentTypes[i]))) { + found = false; + break; } + } else { + found = false; + break; } - return null; - }); + } + } + + if (found) { + result = m; + break; + } + } if (result == null) { if (cls.getSuperclass() == null) return null; @@ -4867,14 +4868,13 @@ private static Method findFunctionRecursive(Class cls, String functionName, S } private static Method findFunctionRecursive(Class cls, String functionName, Class argumentTypes[]) { - Method result = lookupSlots.computeIfAbsent(argumentsHashCode(cls, functionName, argumentTypes), - argumentsHashCode -> { - for (Method m : cls.getDeclaredMethods()) { - if (m.getName().equals(functionName) && Arrays.deepEquals(argumentTypes, m.getParameterTypes())) - return m; - } - return null; - }); + Method result = null; + for (Method m : cls.getDeclaredMethods()) { + if (m.getName().equals(functionName) && Arrays.deepEquals(argumentTypes, m.getParameterTypes())) { + result = m; + break; + } + } if (result == null) { if (cls.getSuperclass() == null) return null; @@ -5112,6 +5112,8 @@ static Map>,EmitMethodInfo> findEmitMethods(Class signalClass) private static native long fromReflectedMethod(Method method); private static native long metaObjectId(QMetaObject metaObject); + + private static native boolean isDynamic(QMetaObject metaObject); private static native void initializeMultiSignal(AbstractMultiSignal signal, Class declaringClass, Field field); diff --git a/www/Android.md b/www/Android.md index 8ac0fa5b..21e9e66a 100644 --- a/www/Android.md +++ b/www/Android.md @@ -56,10 +56,10 @@ Android projects need Qt to be available as jar bundles. Therefore, follow the instructions [here](How-to-bundle-Qt-libraries.md) to create Qt bundles. Copy the required bundles to the app folder of your software project, e.g. for ABI arm64-v8a: -- `qt-lib-core-native-android-arm64-6.5.0.jar` -- `qt-lib-core-native-android-common-6.5.0.jar` -- `qt-lib-gui-native-android-arm64-6.5.0.jar` -- `qt-lib-widgets-native-android-arm64-6.5.0.jar` +- `qt-lib-core-native-android-arm64-6.5.1.jar` +- `qt-lib-core-native-android-common-6.5.1.jar` +- `qt-lib-gui-native-android-arm64-6.5.1.jar` +- `qt-lib-widgets-native-android-arm64-6.5.1.jar` Several libraries have a `native-android-common` component. @@ -68,12 +68,12 @@ Therefore, open the file `app/build.gradle`. Add the following lines to the `dependencies` section (for ABI arm64-v8a): ```gradle - implementation 'io.qtjambi:qtjambi:6.5.0' - implementation 'io.qtjambi:qtjambi-native-android-arm64:6.5.0' - implementation files('qt-lib-core-native-android-arm64-6.5.0.jar', - 'qt-lib-core-native-android-common-6.5.0.jar', - 'qt-lib-gui-native-android-arm64-6.5.0.jar', - 'qt-lib-widgets-native-android-arm64-6.5.0.jar') + implementation 'io.qtjambi:qtjambi:6.5.1' + implementation 'io.qtjambi:qtjambi-native-android-arm64:6.5.1' + implementation files('qt-lib-core-native-android-arm64-6.5.1.jar', + 'qt-lib-core-native-android-common-6.5.1.jar', + 'qt-lib-gui-native-android-arm64-6.5.1.jar', + 'qt-lib-widgets-native-android-arm64-6.5.1.jar') ``` Exchange `android-arm64` by `android-arm` (armeabi-v7a), `android-x86` (x86) or `android-x64` (x86_64). diff --git a/www/Characteristics-of-QtJambi.md b/www/Characteristics-of-QtJambi.md index 4106eee1..b328d44c 100644 --- a/www/Characteristics-of-QtJambi.md +++ b/www/Characteristics-of-QtJambi.md @@ -216,7 +216,7 @@ instance: `QMatrix4x4.add(QMatrix4x4)` - `QPainterPath::operator&=(const QPainterPath&)` → `QPainterPath.intersect(QPainterPath)` - - `QPolygon::operator=(const QPolygon&)` → `QPolygon.set(QPolygon)` + - `QPolygon::operator=(const QPolygon&)` → `QPolygon.assign(QPolygon)` - `QBitArray::operator~()` → `QBitArray.inverted()` - `QVector4D::operator/=(float)` → `QVector4D.divide(float)` @@ -296,10 +296,10 @@ slots and invokable methods. ### Methods -Basically, all public, non-static methods and non-public but void methods in a `QObject`-based class are considered to be -invokable by Qt. You can avoid this by annotating the method with -`@QtUninvokable`. On the other hand, static and non-public methods as well as constructors can -be made invokable with annotation `@QtInvokable`. +Basically, all public and non-static methods in a `QObject`-based class are considered to be +invokable by Qt. This additionally applies to non-public void methods. If you want to make other members invokable +(i.e. static and non-public methods as well as constructors) use the `@QtInvokable` annotation. +Likewise, you can avoid a method to be invokable by annotating with `@QtUninvokable`. ```Java public class Implementor extends QObject{ @@ -447,6 +447,10 @@ this.lengthChanged.connect(this::onLengthChanged); Disconnecting signals and slots works analogous with `disconnect()`. +**It is highly recommended to not subclassing slot interfaces.** +When using string-based or method-handle signal slot connections as shown above Qt monitors receiver's life cycle. +If the receiver is deleted all connections are removed. This monitoring is not possible when connecting to custom slot type implementation. + ##### Special Characteristics in Android Android is not able to resolve the corresponding `QMetaMethod` from a method reference. @@ -483,8 +487,11 @@ Emitting a signal in Java is done by the signal's `emit()` method. Private methods can only be emitted within their declaring classes: ``` java +// emitting normal signal this.statechanged.emit(); this.textChanged.emit("new text"); + +// emitting private signal emit(this.lengthChanged, 5); ``` @@ -611,13 +618,15 @@ Further annotations reflect the corresponding features of Qt properties: Qt6 provides `QProperty` as bindable property member. -You don't need `QtPropertyReader` and `QtPropertyWriter` annotation of your getters and setters follow the Java or Qt design: -In QObject-derived classes, `int getFoo()` and `void setFoo(int)` is auto-detected as property `foo`. +In QObject-derived classes, the appearance of `void setFoo(int)` and `int getFoo()` (or `int foo()`) is auto-detected as property `foo`. +Here, you don't need `QtPropertyReader` and `QtPropertyWriter` annotations. However, QtJambi does not auto-detect read-only or write-only properties. + Likewise, signal `fooChanged` is auto-detected as corresponding notifier even without `QtPropertyNotify` annotation and method `bindableFoo()` returning `QBindable` is auto-detected as corresponding bindable even without `QtPropertyBindable` annotation. In QObject-derived classes, public final fields are considered to be constant (read-only) properties. Additionally, a `final QProperty<...> fooProperty` field is automatically considered to be property `foo`. You don't need getter, setter and bindable. +**Caution, if the member property's identifier ends with `Property` this suffix is cut from the property name!** If your class declares a getter or setter but you don't intend to use it as Qt property you can annotate `@QtPropertyReader(enabled=false)`. @@ -998,7 +1007,7 @@ device.close(); ``` shell java -Djava.library.path= - -p qtjambi-6.5.0.jar:qtjambi-uic-6.5.0.jar + -p qtjambi-6.5.1.jar:qtjambi-uic-6.5.1.jar -m qtjambi.uic --output=src --package=com.myapplication.widgets com/myapplication/widgets/mainwindow.ui ``` @@ -1006,7 +1015,7 @@ Alternative way to call it: ``` shell java -Djava.library.path= - -cp qtjambi-6.5.0.jar:qtjambi-uic-6.5.0.jar + -cp qtjambi-6.5.1.jar:qtjambi-uic-6.5.1.jar io.qt.uic.Main --output=src --package=com.myapplication.widgets com/myapplication/widgets/mainwindow.ui ``` @@ -1058,7 +1067,7 @@ Now, you can load qml code, for instance, by using `QQuickView`: ``` java QQuickView view = new QQuickView(); -view.setSource(QUrl.fromClassPath("com/myapplication/qml/Main.qml")); +view.setSource(new QUrl("qrc:com/myapplication/qml/Main.qml")); view.show(); ``` @@ -1218,7 +1227,7 @@ loaded automatically on demand. ### Registering Custom Plugins -Use the method `QPluginLoader.registerStaticPluginFunction(...)` to +Use the method `QPluginLoader.qRegisterStaticPluginFunction(...)` to register a plugin class or instance. The class inherits `QObject` and needs to implement an interface (or class) known as Qt plugin, for instance: @@ -1236,7 +1245,7 @@ Finally, register the plugin implementation anywhere in your application: ``` java -QPluginLoader.registerStaticPluginFunction(CustomImageIOPlugin.class, Map.of("Keys", List.of("custom"))); +QPluginLoader.qRegisterStaticPluginFunction(CustomImageIOPlugin.class, Map.of("Keys", List.of("custom"))); ``` ### Custom Plugin Libraries @@ -1251,7 +1260,7 @@ and *QtJambi* libraries: ``` shell java -Djava.library.path= - -p qtjambi-6.5.0.jar:qtjambi-deployer-6.5.0.jar + -p qtjambi-6.5.1.jar:qtjambi-deployer-6.5.1.jar -m qtjambi.deployer plugin --class-name=my.company.CustomImageIOPlugin --class-path=my-company-library.jar @@ -1263,7 +1272,7 @@ Alternative way to call it: ``` shell java -Djava.library.path= - -cp qtjambi-6.5.0.jar:qtjambi-deployer-6.5.0.jar + -cp qtjambi-6.5.1.jar:qtjambi-deployer-6.5.1.jar io.qt.qtjambi.deployer.Main plugin --class-name=my.company.CustomImageIOPlugin --class-path=my-company-library.jar @@ -1290,7 +1299,7 @@ This is especially necessary on macOS (arm64). ``` shell java -Djava.library.path= - -p qtjambi-6.5.0.jar:qtjambi-deployer-6.5.0.jar + -p qtjambi-6.5.1.jar:qtjambi-deployer-6.5.1.jar -m qtjambi.deployer plugin --class-name=my.company.CustomImageIOPlugin --class-path=my-company-library.jar diff --git a/www/How-to-bundle-Qt-libraries.md b/www/How-to-bundle-Qt-libraries.md index bfe48697..52a647d4 100644 --- a/www/How-to-bundle-Qt-libraries.md +++ b/www/How-to-bundle-Qt-libraries.md @@ -10,7 +10,7 @@ on *Linux* and *macOS*. ``` shell java -Djava.library.path= - -p qtjambi-6.5.0.jar:qtjambi-deployer-6.5.0.jar + -p qtjambi-6.5.1.jar:qtjambi-deployer-6.5.1.jar -m qtjambi.deployer qt ``` @@ -18,16 +18,16 @@ Alternative way to call it: ``` shell java -Djava.library.path= - -cp qtjambi-6.5.0.jar:qtjambi-deployer-6.5.0.jar + -cp qtjambi-6.5.1.jar:qtjambi-deployer-6.5.1.jar io.qt.qtjambi.deployer.Main qt ``` *QtJambi deployer* autodetects Qt installation on your computer and creates jar bundles for each of the Qt libraries along with their specific plugins. E.g. the output files for Windows look this way: -- `qt-lib-core-native-windows-x64-6.5.0.jar` -- `qt-lib-gui-native-windows-x64-6.5.0.jar` -- `qt-lib-qml-native-windows-x64-6.5.0.jar` +- `qt-lib-core-native-windows-x64-6.5.1.jar` +- `qt-lib-gui-native-windows-x64-6.5.1.jar` +- `qt-lib-qml-native-windows-x64-6.5.1.jar` - ... Place these libraries next to the **qtjambi-native-X.jar** files. @@ -39,7 +39,7 @@ Possible arguments are: - `--platform=...` Target platform, e.g. `android-arm64`, `windows-x64`, `linux-x64`, `macos`. - `-d`, `--target-directory=...` Directory where to place the generated bundle files - `--condifuration=...` Either `debug` or `release` (default), wether to bundle release libraries or debug libraries. - - `--qtdir=...` path to *Qt* version, e.g. `C:\Qt\6.5.0\msvc2019_64` + - `--qtdir=...` path to *Qt* version, e.g. `C:\Qt\6.5.1\msvc2019_64` - `--qtbase=...` alternatively path to *Qt* installation, e.g. `C:\Qt`. - `--target-version=` version to be bundles - `--utilities=...` path to Android utilities (only for android bundles). E.g. `--utilities=utilities/QtAndroidBindings.jar`. diff --git a/www/How-to-deploy-QtJambi-applications.md b/www/How-to-deploy-QtJambi-applications.md index d2e41cf7..b08af6aa 100644 --- a/www/How-to-deploy-QtJambi-applications.md +++ b/www/How-to-deploy-QtJambi-applications.md @@ -7,7 +7,7 @@ along with platform-dependent **qtjambi-deployer-native-X.jar** for all platform In the examples below, we assume you created an application in a jar file `my-company-app.jar` with main class `my.company.app.Main` -depending on `qtjambi-6.4.4.jar`. +depending on `qtjambi-6.5.1.jar`. Call the app deployer as shown below. Make sure the library path points to the *Qt* libraries being `bin` on *Windows* and `lib` @@ -15,7 +15,7 @@ on *Linux* and *macOS*. ``` shell java -Djava.library.path= - -p qtjambi-6.4.4.jar:qtjambi-deployer-6.4.4.jar + -p qtjambi-6.5.1.jar:qtjambi-deployer-6.5.1.jar -m qtjambi.deployer app ``` @@ -23,7 +23,7 @@ Alternative way to call it: ``` shell java -Djava.library.path= - -cp qtjambi-6.4.4.jar:qtjambi-deployer-6.4.4.jar + -cp qtjambi-6.5.1.jar:qtjambi-deployer-6.5.1.jar io.qt.qtjambi.deployer.Main app ``` @@ -70,8 +70,8 @@ installation directory | plugins | ... (platforms, styles and others) | lib - | qtjambi-6.4.4.jar - | qtjambi-native-windows-x64-6.4.4.jar + | qtjambi-6.5.1.jar + | qtjambi-native-windows-x64-6.5.1.jar | my-company-app.jar | jre | ... (Java Runtime Environment) @@ -82,11 +82,11 @@ append the following commands to the above listed *QtJambi deployer* command: ``` shell java -Djava.library.path= - -p qtjambi-6.4.4.jar:qtjambi-deployer-6.4.4.jar + -p qtjambi-6.5.1.jar:qtjambi-deployer-6.5.1.jar -m qtjambi.deployer app --application=MyCompanyApp --executable=utilities/QtJambiLauncher.exe - --class-path=../lib/my-company-app.jar:../lib/qtjambi-6.4.4.jar:../lib/qtjambi-native-windows-x64-6.4.4.jar + --class-path=../lib/my-company-app.jar:../lib/qtjambi-6.5.1.jar:../lib/qtjambi-native-windows-x64-6.5.1.jar --library-path=. --jvm-path=../jre --main-class=my.company.app.Main @@ -108,11 +108,11 @@ installation directory | plugins | ... (platforms, styles and others) | lib - | libQt6Core.so[.6.4.3] - | libQt6Gui.so[.6.4.3] - | libQt6Widgets.so[.6.4.3] - | qtjambi-6.4.4.jar - | qtjambi-native-linux-x64-6.4.4.jar + | libQt6Core.so[.6.5.1] + | libQt6Gui.so[.6.5.1] + | libQt6Widgets.so[.6.5.1] + | qtjambi-6.5.1.jar + | qtjambi-native-linux-x64-6.5.1.jar | my-company-app.jar | jre | ... (Java Runtime Environment) @@ -123,11 +123,11 @@ the following commands to the above listed *QtJambi deployer* command: ``` shell java -Djava.library.path= - -p qtjambi-6.4.4.jar:qtjambi-deployer-6.4.4.jar + -p qtjambi-6.5.1.jar:qtjambi-deployer-6.5.1.jar -m qtjambi.deployer app --application=MyCompanyApp --executable=utilities/QtJambiLauncher - --class-path=lib/my-company-app.jar:lib/qtjambi-6.4.4.jar:lib/qtjambi-native-linux-x64-6.4.4.jar + --class-path=lib/my-company-app.jar:lib/qtjambi-6.5.1.jar:lib/qtjambi-native-linux-x64-6.5.1.jar --library-path=lib --jvm-path=jre --main-class=my.company.app.Main @@ -155,8 +155,8 @@ installation directory | QtGui.framework | QtWidgets.framework | lib - | qtjambi-6.4.4.jar - | qtjambi-native-macos-6.4.4.jar + | qtjambi-6.5.1.jar + | qtjambi-native-macos-6.5.1.jar | my-company-app.jar | jre | ... (Java Runtime Environment) @@ -170,11 +170,11 @@ append the following commands to the above listed *QtJambi deployer* command: ``` shell java -Djava.library.path= - -p qtjambi-6.4.4.jar:qtjambi-deployer-6.4.4.jar + -p qtjambi-6.5.1.jar:qtjambi-deployer-6.5.1.jar -m qtjambi.deployer app --application=MyCompanyApp --executable=utilities/QtJambiLauncher.app - --class-path=../lib/my-company-app.jar:../lib/qtjambi-6.4.4.jar:../lib/qtjambi-native-macos-6.4.4.jar + --class-path=../lib/my-company-app.jar:../lib/qtjambi-6.5.1.jar:../lib/qtjambi-native-macos-6.5.1.jar --library-path=../Frameworks --jvm-path=../jre --main-class=my.company.app.Main diff --git a/www/How-to-develop-Qt-in-Java.md b/www/How-to-develop-Qt-in-Java.md index 495754c5..860d8901 100644 --- a/www/How-to-develop-Qt-in-Java.md +++ b/www/How-to-develop-Qt-in-Java.md @@ -13,7 +13,7 @@ to your project: $VERSION ``` -(exchange `$VERSION` either by `5.15.14` or by `6.5.0`). +(exchange `$VERSION` either by `5.15.14` or by `6.5.1`). Otherwise, download QtJambi JAR file from [Maven Central Repository](https://search.maven.org/artifact/io.qtjambi/qtjambi/). Find the [list of all available QtJambi modules](www/Modules.md). @@ -36,7 +36,7 @@ public class Test { Compile the file: ``` powershell -javac -cp qtjambi-6.5.0.jar Test.java +javac -cp qtjambi-6.5.1.jar Test.java ``` ## Executing Example @@ -57,19 +57,19 @@ macOS) or the Java runtime property **java.library.path**. The example program can be executed this way on Windows: ``` powershell -java -cp qtjambi-6.5.0.jar;qtjambi-native-windows-x64-6.5.0.jar;. -Djava.library.path=C:\Qt\6.5.0\msvc2019_64\bin Test +java -cp qtjambi-6.5.1.jar;qtjambi-native-windows-x64-6.5.1.jar;. -Djava.library.path=C:\Qt\6.5.1\msvc2019_64\bin Test ``` On Linux it looks this way: ``` bash -java -cp qtjambi-6.5.0.jar:qtjambi-native-linux-x64-6.5.0.jar:. -Djava.library.path=/Qt/6.5.0/gcc_64/lib Test +java -cp qtjambi-6.5.1.jar:qtjambi-native-linux-x64-6.5.1.jar:. -Djava.library.path=/Qt/6.5.1/gcc_64/lib Test ``` On macOS you additionally need to use the start parameter -XstartOnFirstThread: ``` bash -java -cp qtjambi-6.5.0.jar:qtjambi-native-macos-6.5.0.jar:. -Djava.library.path=/Qt/6.5.0/macos/lib -XstartOnFirstThread Test +java -cp qtjambi-6.5.1.jar:qtjambi-native-macos-6.5.1.jar:. -Djava.library.path=/Qt/6.5.1/macos/lib -XstartOnFirstThread Test ``` ### Native Components @@ -96,17 +96,32 @@ here](How-to-deploy-QtJambi-applications.md). See [QtJambi 5.15 API Reference Documentation](https://doc.qtjambi.io/5.15.14/), and [QtJambi 6.5 API Reference -Documentation](https://doc.qtjambi.io/6.5.0/) +Documentation](https://doc.qtjambi.io/6.5.1/) ## Useful Java System Properties for QtJambi Following system properties are accepted by QtJambi. You can specify Java system properties as start argument `-Dproperty=value` or in Java code `System.setProperty("property", "value")`. -### Message Handling +### Logging -* `io.qt.log-messages` - By specifying any combination of `ALL`, `CRITICAL`, `DEBUG`, `WARNING`, `FATAL`, `INFO` and `SYSTEM` you can install a message handler causing exceptions to be thrown in the event of a message of given type. -* `io.qt.exceptions-for-messages` - By specifying any combination of `ALL`, `CRITICAL`, `DEBUG`, `WARNING`, `FATAL`, `INFO` and `SYSTEM` you can install a message handler forwarding messages of given types to Java logging. +* `io.qt.log-messages` - By specifying any combination of `ALL`, `CRITICAL`, `DEBUG`, `WARNING`, `FATAL`, `INFO` and `SYSTEM` you can install a message handler forwarding messages of given types to Java logging. In combination with this use following properties to define logging levels. All specified values have to be parsable by [`Level.parse(String)`](https://docs.oracle.com/en/java/javase/11/docs/api/java.logging/java/util/logging/Level.html#parse(java.lang.String)): + * `io.qt.log.debug.level` - Specify level value to define the log level for `QtDebugMsg` (defaults to `FINEST`) + * `io.qt.log.critical.level` - Specify level value to define the log level for `QtCriticalMsg` (defaults to `SEVERE`) + * `io.qt.log.fatal.level` - Specify level value to define the log level for `QtFatalMsg` (defaults to `SEVERE`) + * `io.qt.log.info.level` - Specify level value to define the log level for `QtInfoMsg` (defaults to `INFO`) + * `io.qt.log.warning.level` - Specify level value to define the log level for `QtWarningMsg` (defaults to `WARNING`) +* `io.qt.exceptions-for-messages` - By specifying any combination of `ALL`, `CRITICAL`, `DEBUG`, `WARNING`, `FATAL`, `INFO` and `SYSTEM` you can install a message handler causing exceptions to be thrown in the event of a message of given type. + +### Runtime Diagnostics + +* `io.qt.enable-method-logs` - Specify `true` to activate method logging. +* `io.qt.enable-dangling-pointer-check` - Specify `true` to activate dangling pointer checks. +* `io.qt.enable-concurrent-container-modification-check` - Specify `true` to activate concurrent modification checks during container iteration. +* `io.qt.enable-thread-affinity-check` - Specify `true` to activate thread affinity checks when calling certain thread-affine methods. +* `io.qt.enable-event-thread-affinity-check` - ...the same applying to access checks during event handling. +* ~~`io.qt.disable-thread-affinity-check`~~ - _check is disabled by default since QtJambi 6.5.1._ +* ~~`io.qt.disable-event-thread-affinity-check`~~ - _check is disabled by default since QtJambi 6.5.1._ ### Library Management @@ -125,8 +140,6 @@ If you native library bundles QtJambi extracts these components to temporary dir * `io.qt.allow-nonfinal-signals` - Specify `true` to avoid exception to be thrown when detecting non-final signal declarations. * `io.qt.no-library-shutdown-hook` - Specify `true` to avoid library shutdown at program termination. -* `io.qt.disable-thread-affinity-check` - Specify `true` to avoid thread affinity checks when accessing `QObject`s. Use this property to improve performance in release versions of your well tested applications. -* `io.qt.disable-event-thread-affinity-check` - ...the same applying to access checks during event handling. * `io.qt.no-app-deletion` - Specify `true` if you combine native code with Java code and your `QCoreApplication` instance has been created elsewhere than inside Java. ### QML diff --git a/www/Modules.md b/www/Modules.md index 7c69dacd..77b2e00a 100644 --- a/www/Modules.md +++ b/www/Modules.md @@ -11,7 +11,7 @@ QtJambi is available for Qt5 and Qt6. All modules are published as Maven Artifac $VERSION ``` -Here, exchange `$VERSION` either by `5.15.14` or by `6.5.0`. Exchange `$MODULE` by *QtJambi* module name as listed below. +Here, exchange `$VERSION` either by `5.15.14` or by `6.5.1`. Exchange `$MODULE` by *QtJambi* module name as listed below. Alternatively, you can download corresponding QtJambi modules as JAR file from [Maven Central Repository](https://search.maven.org/search?q=io.qtjambi). @@ -20,524 +20,526 @@ Native components are avaiable for Windows (x64), Linux (x64), macOS (x64 and ar ## QtJambi for Qt 6.5 -QtJambi 6.5.0 requires Qt 6.5.x whereas x can be any patch version. +QtJambi 6.5.1 requires Qt 6.5.x whereas x can be any patch version (except **qtjambi-activex**). +This release has been built with Qt 6.5.1. Following Qt 6.5 modules are provided by QtJambi: ### Qt6 Essentials * [QtCore](https://doc.qt.io/qt-6/qtcore-index.html), [QtGui](https://doc.qt.io/qt-6/qtgui-index.html) and [QtWidgets](https://doc.qt.io/qt-6/qtwidgets-index.html) in module **qtjambi**: - * [**qtjambi-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi/6.5.0/jar) - * [**qtjambi-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-windows-x64/6.5.0/jar) - * [**qtjambi-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-linux-x64/6.5.0/jar) - * [**qtjambi-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-macos/6.5.0/jar) - * [**qtjambi-native-android-x86-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-android-x86/6.5.0/jar) - * [**qtjambi-native-android-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-android-x64/6.5.0/jar) - * [**qtjambi-native-android-arm-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-android-arm/6.5.0/jar) - * [**qtjambi-native-android-arm64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-android-arm64/6.5.0/jar) + * [**qtjambi-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi/6.5.1/jar) + * [**qtjambi-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-windows-x64/6.5.1/jar) + * [**qtjambi-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-linux-x64/6.5.1/jar) + * [**qtjambi-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-macos/6.5.1/jar) + * [**qtjambi-native-android-x86-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-android-x86/6.5.1/jar) + * [**qtjambi-native-android-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-android-x64/6.5.1/jar) + * [**qtjambi-native-android-arm-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-android-arm/6.5.1/jar) + * [**qtjambi-native-android-arm64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-android-arm64/6.5.1/jar) * [QtDBus](https://doc.qt.io/qt-6/qtdbus-index.html) in module **qtjambi-dbus**: - * [**qtjambi-dbus-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus/6.5.0/jar) - * [**qtjambi-dbus-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-windows-x64/6.5.0/jar) - * [**qtjambi-dbus-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-linux-x64/6.5.0/jar) - * [**qtjambi-dbus-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-macos/6.5.0/jar) + * [**qtjambi-dbus-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus/6.5.1/jar) + * [**qtjambi-dbus-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-windows-x64/6.5.1/jar) + * [**qtjambi-dbus-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-linux-x64/6.5.1/jar) + * [**qtjambi-dbus-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-macos/6.5.1/jar) * [QtNetwork](https://doc.qt.io/qt-6/qtnetwork-index.html) in module **qtjambi-network**: - * [**qtjambi-network-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network/6.5.0/jar) - * [**qtjambi-network-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-windows-x64/6.5.0/jar) - * [**qtjambi-network-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-linux-x64/6.5.0/jar) - * [**qtjambi-network-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-macos/6.5.0/jar) - * [**qtjambi-network-native-android-x86-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-android-x86/6.5.0/jar) - * [**qtjambi-network-native-android-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-android-x64/6.5.0/jar) - * [**qtjambi-network-native-android-arm-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-android-arm/6.5.0/jar) - * [**qtjambi-network-native-android-arm64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-android-arm64/6.5.0/jar) + * [**qtjambi-network-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network/6.5.1/jar) + * [**qtjambi-network-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-windows-x64/6.5.1/jar) + * [**qtjambi-network-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-linux-x64/6.5.1/jar) + * [**qtjambi-network-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-macos/6.5.1/jar) + * [**qtjambi-network-native-android-x86-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-android-x86/6.5.1/jar) + * [**qtjambi-network-native-android-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-android-x64/6.5.1/jar) + * [**qtjambi-network-native-android-arm-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-android-arm/6.5.1/jar) + * [**qtjambi-network-native-android-arm64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-android-arm64/6.5.1/jar) * [QtQml](https://doc.qt.io/qt-6/qtqml-index.html) in module **qtjambi-qml**: - * [**qtjambi-qml-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml/6.5.0/jar) - * [**qtjambi-qml-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-windows-x64/6.5.0/jar) - * [**qtjambi-qml-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-linux-x64/6.5.0/jar) - * [**qtjambi-qml-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-macos/6.5.0/jar) - * [**qtjambi-qml-native-android-x86-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-android-x86/6.5.0/jar) - * [**qtjambi-qml-native-android-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-android-x64/6.5.0/jar) - * [**qtjambi-qml-native-android-arm-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-android-arm/6.5.0/jar) - * [**qtjambi-qml-native-android-arm64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-android-arm64/6.5.0/jar) + * [**qtjambi-qml-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml/6.5.1/jar) + * [**qtjambi-qml-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-windows-x64/6.5.1/jar) + * [**qtjambi-qml-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-linux-x64/6.5.1/jar) + * [**qtjambi-qml-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-macos/6.5.1/jar) + * [**qtjambi-qml-native-android-x86-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-android-x86/6.5.1/jar) + * [**qtjambi-qml-native-android-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-android-x64/6.5.1/jar) + * [**qtjambi-qml-native-android-arm-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-android-arm/6.5.1/jar) + * [**qtjambi-qml-native-android-arm64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-android-arm64/6.5.1/jar) * [QtQuick](https://doc.qt.io/qt-6/qtquick-index.html) in module **qtjambi-quick**: - * [**qtjambi-quick-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick/6.5.0/jar) - * [**qtjambi-quick-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-windows-x64/6.5.0/jar) - * [**qtjambi-quick-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-linux-x64/6.5.0/jar) - * [**qtjambi-quick-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-macos/6.5.0/jar) - * [**qtjambi-quick-native-android-x86-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-android-x86/6.5.0/jar) - * [**qtjambi-quick-native-android-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-android-x64/6.5.0/jar) - * [**qtjambi-quick-native-android-arm-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-android-arm/6.5.0/jar) - * [**qtjambi-quick-native-android-arm64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-android-arm64/6.5.0/jar) + * [**qtjambi-quick-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick/6.5.1/jar) + * [**qtjambi-quick-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-windows-x64/6.5.1/jar) + * [**qtjambi-quick-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-linux-x64/6.5.1/jar) + * [**qtjambi-quick-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-macos/6.5.1/jar) + * [**qtjambi-quick-native-android-x86-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-android-x86/6.5.1/jar) + * [**qtjambi-quick-native-android-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-android-x64/6.5.1/jar) + * [**qtjambi-quick-native-android-arm-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-android-arm/6.5.1/jar) + * [**qtjambi-quick-native-android-arm64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-android-arm64/6.5.1/jar) * [QtQuickControls](https://doc.qt.io/qt-6/qtquickcontrols-index.html) in module **qtjambi-quickcontrols**: - * [**qtjambi-quickcontrols-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols/6.5.0/jar) - * [**qtjambi-quickcontrols-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-windows-x64/6.5.0/jar) - * [**qtjambi-quickcontrols-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-linux-x64/6.5.0/jar) - * [**qtjambi-quickcontrols-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-macos/6.5.0/jar) - * [**qtjambi-quickcontrols-native-android-x86-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-android-x86/6.5.0/jar) - * [**qtjambi-quickcontrols-native-android-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-android-x64/6.5.0/jar) - * [**qtjambi-quickcontrols-native-android-arm-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-android-arm/6.5.0/jar) - * [**qtjambi-quickcontrols-native-android-arm64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-android-arm64/6.5.0/jar) + * [**qtjambi-quickcontrols-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols/6.5.1/jar) + * [**qtjambi-quickcontrols-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-windows-x64/6.5.1/jar) + * [**qtjambi-quickcontrols-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-linux-x64/6.5.1/jar) + * [**qtjambi-quickcontrols-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-macos/6.5.1/jar) + * [**qtjambi-quickcontrols-native-android-x86-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-android-x86/6.5.1/jar) + * [**qtjambi-quickcontrols-native-android-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-android-x64/6.5.1/jar) + * [**qtjambi-quickcontrols-native-android-arm-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-android-arm/6.5.1/jar) + * [**qtjambi-quickcontrols-native-android-arm64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-android-arm64/6.5.1/jar) * [QtQuickTest](https://doc.qt.io/qt-6/qtquicktest-index.html) in module **qtjambi-quicktest**: - * [**qtjambi-quicktest-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest/6.5.0/jar) - * [**qtjambi-quicktest-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-windows-x64/6.5.0/jar) - * [**qtjambi-quicktest-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-linux-x64/6.5.0/jar) - * [**qtjambi-quicktest-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-macos/6.5.0/jar) - * [**qtjambi-quicktest-native-android-x86-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-android-x86/6.5.0/jar) - * [**qtjambi-quicktest-native-android-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-android-x64/6.5.0/jar) - * [**qtjambi-quicktest-native-android-arm-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-android-arm/6.5.0/jar) - * [**qtjambi-quicktest-native-android-arm64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-android-arm64/6.5.0/jar) + * [**qtjambi-quicktest-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest/6.5.1/jar) + * [**qtjambi-quicktest-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-windows-x64/6.5.1/jar) + * [**qtjambi-quicktest-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-linux-x64/6.5.1/jar) + * [**qtjambi-quicktest-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-macos/6.5.1/jar) + * [**qtjambi-quicktest-native-android-x86-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-android-x86/6.5.1/jar) + * [**qtjambi-quicktest-native-android-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-android-x64/6.5.1/jar) + * [**qtjambi-quicktest-native-android-arm-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-android-arm/6.5.1/jar) + * [**qtjambi-quicktest-native-android-arm64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-android-arm64/6.5.1/jar) * [QtTest](https://doc.qt.io/qt-6/qttest-index.html) in module **qtjambi-test**: - * [**qtjambi-test-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test/6.5.0/jar) - * [**qtjambi-test-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-windows-x64/6.5.0/jar) - * [**qtjambi-test-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-linux-x64/6.5.0/jar) - * [**qtjambi-test-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-macos/6.5.0/jar) - * [**qtjambi-test-native-android-x86-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-android-x86/6.5.0/jar) - * [**qtjambi-test-native-android-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-android-x64/6.5.0/jar) - * [**qtjambi-test-native-android-arm-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-android-arm/6.5.0/jar) - * [**qtjambi-test-native-android-arm64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-android-arm64/6.5.0/jar) + * [**qtjambi-test-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test/6.5.1/jar) + * [**qtjambi-test-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-windows-x64/6.5.1/jar) + * [**qtjambi-test-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-linux-x64/6.5.1/jar) + * [**qtjambi-test-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-macos/6.5.1/jar) + * [**qtjambi-test-native-android-x86-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-android-x86/6.5.1/jar) + * [**qtjambi-test-native-android-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-android-x64/6.5.1/jar) + * [**qtjambi-test-native-android-arm-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-android-arm/6.5.1/jar) + * [**qtjambi-test-native-android-arm64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-android-arm64/6.5.1/jar) ### Qt6 Add-Ons * [QtBluetooth](https://doc.qt.io/qt-6/qtbluetooth-index.html) in module **qtjambi-bluetooth**: - * [**qtjambi-bluetooth-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth/6.5.0/jar) - * [**qtjambi-bluetooth-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-windows-x64/6.5.0/jar) - * [**qtjambi-bluetooth-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-linux-x64/6.5.0/jar) - * [**qtjambi-bluetooth-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-macos/6.5.0/jar) - * [**qtjambi-bluetooth-native-android-x86-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-android-x86/6.5.0/jar) - * [**qtjambi-bluetooth-native-android-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-android-x64/6.5.0/jar) - * [**qtjambi-bluetooth-native-android-arm-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-android-arm/6.5.0/jar) - * [**qtjambi-bluetooth-native-android-arm64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-android-arm64/6.5.0/jar) + * [**qtjambi-bluetooth-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth/6.5.1/jar) + * [**qtjambi-bluetooth-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-windows-x64/6.5.1/jar) + * [**qtjambi-bluetooth-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-linux-x64/6.5.1/jar) + * [**qtjambi-bluetooth-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-macos/6.5.1/jar) + * [**qtjambi-bluetooth-native-android-x86-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-android-x86/6.5.1/jar) + * [**qtjambi-bluetooth-native-android-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-android-x64/6.5.1/jar) + * [**qtjambi-bluetooth-native-android-arm-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-android-arm/6.5.1/jar) + * [**qtjambi-bluetooth-native-android-arm64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-android-arm64/6.5.1/jar) * [QtCharts](https://doc.qt.io/qt-6/qtcharts-index.html) in module **qtjambi-charts**: - * [**qtjambi-charts-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts/6.5.0/jar) - * [**qtjambi-charts-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-windows-x64/6.5.0/jar) - * [**qtjambi-charts-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-linux-x64/6.5.0/jar) - * [**qtjambi-charts-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-macos/6.5.0/jar) - * [**qtjambi-charts-native-android-x86-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-android-x86/6.5.0/jar) - * [**qtjambi-charts-native-android-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-android-x64/6.5.0/jar) - * [**qtjambi-charts-native-android-arm-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-android-arm/6.5.0/jar) - * [**qtjambi-charts-native-android-arm64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-android-arm64/6.5.0/jar) + * [**qtjambi-charts-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts/6.5.1/jar) + * [**qtjambi-charts-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-windows-x64/6.5.1/jar) + * [**qtjambi-charts-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-linux-x64/6.5.1/jar) + * [**qtjambi-charts-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-macos/6.5.1/jar) + * [**qtjambi-charts-native-android-x86-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-android-x86/6.5.1/jar) + * [**qtjambi-charts-native-android-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-android-x64/6.5.1/jar) + * [**qtjambi-charts-native-android-arm-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-android-arm/6.5.1/jar) + * [**qtjambi-charts-native-android-arm64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-android-arm64/6.5.1/jar) * [QtDataVisualization](https://doc.qt.io/qt-6/qtdatavisualization-index.html) in module **qtjambi-datavisualization**: - * [**qtjambi-datavisualization-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization/6.5.0/jar) - * [**qtjambi-datavisualization-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-windows-x64/6.5.0/jar) - * [**qtjambi-datavisualization-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-linux-x64/6.5.0/jar) - * [**qtjambi-datavisualization-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-macos/6.5.0/jar) - * [**qtjambi-datavisualization-native-android-x86-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-android-x86/6.5.0/jar) - * [**qtjambi-datavisualization-native-android-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-android-x64/6.5.0/jar) - * [**qtjambi-datavisualization-native-android-arm-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-android-arm/6.5.0/jar) - * [**qtjambi-datavisualization-native-android-arm64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-android-arm64/6.5.0/jar) + * [**qtjambi-datavisualization-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization/6.5.1/jar) + * [**qtjambi-datavisualization-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-windows-x64/6.5.1/jar) + * [**qtjambi-datavisualization-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-linux-x64/6.5.1/jar) + * [**qtjambi-datavisualization-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-macos/6.5.1/jar) + * [**qtjambi-datavisualization-native-android-x86-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-android-x86/6.5.1/jar) + * [**qtjambi-datavisualization-native-android-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-android-x64/6.5.1/jar) + * [**qtjambi-datavisualization-native-android-arm-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-android-arm/6.5.1/jar) + * [**qtjambi-datavisualization-native-android-arm64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-android-arm64/6.5.1/jar) * [QtConcurrent](https://doc.qt.io/qt-6/qtconcurrent-index.html) in module **qtjambi-concurrent**: - * [**qtjambi-concurrent-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent/6.5.0/jar) - * [**qtjambi-concurrent-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-windows-x64/6.5.0/jar) - * [**qtjambi-concurrent-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-linux-x64/6.5.0/jar) - * [**qtjambi-concurrent-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-macos/6.5.0/jar) - * [**qtjambi-concurrent-native-android-x86-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-android-x86/6.5.0/jar) - * [**qtjambi-concurrent-native-android-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-android-x64/6.5.0/jar) - * [**qtjambi-concurrent-native-android-arm-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-android-arm/6.5.0/jar) - * [**qtjambi-concurrent-native-android-arm64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-android-arm64/6.5.0/jar) + * [**qtjambi-concurrent-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent/6.5.1/jar) + * [**qtjambi-concurrent-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-windows-x64/6.5.1/jar) + * [**qtjambi-concurrent-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-linux-x64/6.5.1/jar) + * [**qtjambi-concurrent-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-macos/6.5.1/jar) + * [**qtjambi-concurrent-native-android-x86-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-android-x86/6.5.1/jar) + * [**qtjambi-concurrent-native-android-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-android-x64/6.5.1/jar) + * [**qtjambi-concurrent-native-android-arm-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-android-arm/6.5.1/jar) + * [**qtjambi-concurrent-native-android-arm64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-android-arm64/6.5.1/jar) * [QtHelp](https://doc.qt.io/qt-6/qthelp-index.html) in module **qtjambi-help**: - * [**qtjambi-help-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help/6.5.0/jar) - * [**qtjambi-help-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-windows-x64/6.5.0/jar) - * [**qtjambi-help-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-linux-x64/6.5.0/jar) - * [**qtjambi-help-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-macos/6.5.0/jar) - * [**qtjambi-help-native-android-x86-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-android-x86/6.5.0/jar) - * [**qtjambi-help-native-android-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-android-x64/6.5.0/jar) - * [**qtjambi-help-native-android-arm-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-android-arm/6.5.0/jar) - * [**qtjambi-help-native-android-arm64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-android-arm64/6.5.0/jar) + * [**qtjambi-help-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help/6.5.1/jar) + * [**qtjambi-help-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-windows-x64/6.5.1/jar) + * [**qtjambi-help-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-linux-x64/6.5.1/jar) + * [**qtjambi-help-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-macos/6.5.1/jar) + * [**qtjambi-help-native-android-x86-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-android-x86/6.5.1/jar) + * [**qtjambi-help-native-android-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-android-x64/6.5.1/jar) + * [**qtjambi-help-native-android-arm-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-android-arm/6.5.1/jar) + * [**qtjambi-help-native-android-arm64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-android-arm64/6.5.1/jar) * [QtOpenGL](https://doc.qt.io/qt-6/qtopengl-index.html) in module **qtjambi-opengl**: - * [**qtjambi-opengl-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl/6.5.0/jar) - * [**qtjambi-opengl-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl-native-windows-x64/6.5.0/jar) - * [**qtjambi-opengl-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl-native-linux-x64/6.5.0/jar) - * [**qtjambi-opengl-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl-native-macos/6.5.0/jar) - * [**qtjambi-opengl-native-android-x86-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl-native-android-x86/6.5.0/jar) - * [**qtjambi-opengl-native-android-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl-native-android-x64/6.5.0/jar) - * [**qtjambi-opengl-native-android-arm-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl-native-android-arm/6.5.0/jar) - * [**qtjambi-opengl-native-android-arm64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl-native-android-arm64/6.5.0/jar) + * [**qtjambi-opengl-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl/6.5.1/jar) + * [**qtjambi-opengl-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl-native-windows-x64/6.5.1/jar) + * [**qtjambi-opengl-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl-native-linux-x64/6.5.1/jar) + * [**qtjambi-opengl-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl-native-macos/6.5.1/jar) + * [**qtjambi-opengl-native-android-x86-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl-native-android-x86/6.5.1/jar) + * [**qtjambi-opengl-native-android-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl-native-android-x64/6.5.1/jar) + * [**qtjambi-opengl-native-android-arm-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl-native-android-arm/6.5.1/jar) + * [**qtjambi-opengl-native-android-arm64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl-native-android-arm64/6.5.1/jar) * [QtOpenGLWidgets](https://doc.qt.io/qt-6/qtopenglwidgets-module.html) in module **qtjambi-openglwidgets**: - * [**qtjambi-openglwidgets-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets/6.5.0/jar) - * [**qtjambi-openglwidgets-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets-native-windows-x64/6.5.0/jar) - * [**qtjambi-openglwidgets-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets-native-linux-x64/6.5.0/jar) - * [**qtjambi-openglwidgets-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets-native-macos/6.5.0/jar) - * [**qtjambi-openglwidgets-native-android-x86-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets-native-android-x86/6.5.0/jar) - * [**qtjambi-openglwidgets-native-android-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets-native-android-x64/6.5.0/jar) - * [**qtjambi-openglwidgets-native-android-arm-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets-native-android-arm/6.5.0/jar) - * [**qtjambi-openglwidgets-native-android-arm64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets-native-android-arm64/6.5.0/jar) + * [**qtjambi-openglwidgets-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets/6.5.1/jar) + * [**qtjambi-openglwidgets-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets-native-windows-x64/6.5.1/jar) + * [**qtjambi-openglwidgets-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets-native-linux-x64/6.5.1/jar) + * [**qtjambi-openglwidgets-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets-native-macos/6.5.1/jar) + * [**qtjambi-openglwidgets-native-android-x86-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets-native-android-x86/6.5.1/jar) + * [**qtjambi-openglwidgets-native-android-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets-native-android-x64/6.5.1/jar) + * [**qtjambi-openglwidgets-native-android-arm-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets-native-android-arm/6.5.1/jar) + * [**qtjambi-openglwidgets-native-android-arm64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets-native-android-arm64/6.5.1/jar) * [QtMultimedia](https://doc.qt.io/qt-6/qtmultimedia-index.html) in module **qtjambi-multimedia**: - * [**qtjambi-multimedia-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia/6.5.0/jar) - * [**qtjambi-multimedia-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-windows-x64/6.5.0/jar) - * [**qtjambi-multimedia-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-linux-x64/6.5.0/jar) - * [**qtjambi-multimedia-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-macos/6.5.0/jar) - * [**qtjambi-multimedia-native-android-x86-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-android-x86/6.5.0/jar) - * [**qtjambi-multimedia-native-android-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-android-x64/6.5.0/jar) - * [**qtjambi-multimedia-native-android-arm-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-android-arm/6.5.0/jar) - * [**qtjambi-multimedia-native-android-arm64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-android-arm64/6.5.0/jar) + * [**qtjambi-multimedia-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia/6.5.1/jar) + * [**qtjambi-multimedia-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-windows-x64/6.5.1/jar) + * [**qtjambi-multimedia-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-linux-x64/6.5.1/jar) + * [**qtjambi-multimedia-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-macos/6.5.1/jar) + * [**qtjambi-multimedia-native-android-x86-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-android-x86/6.5.1/jar) + * [**qtjambi-multimedia-native-android-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-android-x64/6.5.1/jar) + * [**qtjambi-multimedia-native-android-arm-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-android-arm/6.5.1/jar) + * [**qtjambi-multimedia-native-android-arm64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-android-arm64/6.5.1/jar) * [QtMultimediaWidgets](https://doc.qt.io/qt-6/qtmultimedia-index.html) in module **qtjambi-multimediawidgets**: - * [**qtjambi-multimediawidgets-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets/6.5.0/jar) - * [**qtjambi-multimediawidgets-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-windows-x64/6.5.0/jar) - * [**qtjambi-multimediawidgets-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-linux-x64/6.5.0/jar) - * [**qtjambi-multimediawidgets-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-macos/6.5.0/jar) - * [**qtjambi-multimediawidgets-native-android-x86-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-android-x86/6.5.0/jar) - * [**qtjambi-multimediawidgets-native-android-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-android-x64/6.5.0/jar) - * [**qtjambi-multimediawidgets-native-android-arm-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-android-arm/6.5.0/jar) - * [**qtjambi-multimediawidgets-native-android-arm64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-android-arm64/6.5.0/jar) + * [**qtjambi-multimediawidgets-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets/6.5.1/jar) + * [**qtjambi-multimediawidgets-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-windows-x64/6.5.1/jar) + * [**qtjambi-multimediawidgets-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-linux-x64/6.5.1/jar) + * [**qtjambi-multimediawidgets-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-macos/6.5.1/jar) + * [**qtjambi-multimediawidgets-native-android-x86-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-android-x86/6.5.1/jar) + * [**qtjambi-multimediawidgets-native-android-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-android-x64/6.5.1/jar) + * [**qtjambi-multimediawidgets-native-android-arm-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-android-arm/6.5.1/jar) + * [**qtjambi-multimediawidgets-native-android-arm64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-android-arm64/6.5.1/jar) * [QtNfc](https://doc.qt.io/qt-6/qtnfc-index.html) in module **qtjambi-nfc**: - * [**qtjambi-nfc-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc/6.5.0/jar) - * [**qtjambi-nfc-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-windows-x64/6.5.0/jar) - * [**qtjambi-nfc-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-linux-x64/6.5.0/jar) - * [**qtjambi-nfc-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-macos/6.5.0/jar) - * [**qtjambi-nfc-native-android-x86-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-android-x86/6.5.0/jar) - * [**qtjambi-nfc-native-android-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-android-x64/6.5.0/jar) - * [**qtjambi-nfc-native-android-arm-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-android-arm/6.5.0/jar) - * [**qtjambi-nfc-native-android-arm64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-android-arm64/6.5.0/jar) + * [**qtjambi-nfc-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc/6.5.1/jar) + * [**qtjambi-nfc-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-windows-x64/6.5.1/jar) + * [**qtjambi-nfc-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-linux-x64/6.5.1/jar) + * [**qtjambi-nfc-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-macos/6.5.1/jar) + * [**qtjambi-nfc-native-android-x86-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-android-x86/6.5.1/jar) + * [**qtjambi-nfc-native-android-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-android-x64/6.5.1/jar) + * [**qtjambi-nfc-native-android-arm-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-android-arm/6.5.1/jar) + * [**qtjambi-nfc-native-android-arm64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-android-arm64/6.5.1/jar) * [QtNetworkAuth](https://doc.qt.io/qt-6/qtnetworkauth-index.html) in module **qtjambi-networkauth**: - * [**qtjambi-networkauth-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth/6.5.0/jar) - * [**qtjambi-networkauth-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-windows-x64/6.5.0/jar) - * [**qtjambi-networkauth-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-linux-x64/6.5.0/jar) - * [**qtjambi-networkauth-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-macos/6.5.0/jar) - * [**qtjambi-networkauth-native-android-x86-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-android-x86/6.5.0/jar) - * [**qtjambi-networkauth-native-android-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-android-x64/6.5.0/jar) - * [**qtjambi-networkauth-native-android-arm-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-android-arm/6.5.0/jar) - * [**qtjambi-networkauth-native-android-arm64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-android-arm64/6.5.0/jar) + * [**qtjambi-networkauth-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth/6.5.1/jar) + * [**qtjambi-networkauth-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-windows-x64/6.5.1/jar) + * [**qtjambi-networkauth-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-linux-x64/6.5.1/jar) + * [**qtjambi-networkauth-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-macos/6.5.1/jar) + * [**qtjambi-networkauth-native-android-x86-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-android-x86/6.5.1/jar) + * [**qtjambi-networkauth-native-android-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-android-x64/6.5.1/jar) + * [**qtjambi-networkauth-native-android-arm-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-android-arm/6.5.1/jar) + * [**qtjambi-networkauth-native-android-arm64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-android-arm64/6.5.1/jar) * [QtPositioning](https://doc.qt.io/qt-6/qtpositioning-index.html) in module **qtjambi-positioning**: - * [**qtjambi-positioning-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning/6.5.0/jar) - * [**qtjambi-positioning-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-windows-x64/6.5.0/jar) - * [**qtjambi-positioning-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-linux-x64/6.5.0/jar) - * [**qtjambi-positioning-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-macos/6.5.0/jar) - * [**qtjambi-positioning-native-android-x86-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-android-x86/6.5.0/jar) - * [**qtjambi-positioning-native-android-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-android-x64/6.5.0/jar) - * [**qtjambi-positioning-native-android-arm-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-android-arm/6.5.0/jar) - * [**qtjambi-positioning-native-android-arm64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-android-arm64/6.5.0/jar) + * [**qtjambi-positioning-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning/6.5.1/jar) + * [**qtjambi-positioning-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-windows-x64/6.5.1/jar) + * [**qtjambi-positioning-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-linux-x64/6.5.1/jar) + * [**qtjambi-positioning-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-macos/6.5.1/jar) + * [**qtjambi-positioning-native-android-x86-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-android-x86/6.5.1/jar) + * [**qtjambi-positioning-native-android-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-android-x64/6.5.1/jar) + * [**qtjambi-positioning-native-android-arm-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-android-arm/6.5.1/jar) + * [**qtjambi-positioning-native-android-arm64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-android-arm64/6.5.1/jar) * [QtPrintSupport](https://doc.qt.io/qt-6/qtprintsupport-index.html) in module **qtjambi-printsupport**: - * [**qtjambi-printsupport-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport/6.5.0/jar) - * [**qtjambi-printsupport-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-windows-x64/6.5.0/jar) - * [**qtjambi-printsupport-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-linux-x64/6.5.0/jar) - * [**qtjambi-printsupport-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-macos/6.5.0/jar) - * [**qtjambi-printsupport-native-android-x86-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-android-x86/6.5.0/jar) - * [**qtjambi-printsupport-native-android-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-android-x64/6.5.0/jar) - * [**qtjambi-printsupport-native-android-arm-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-android-arm/6.5.0/jar) - * [**qtjambi-printsupport-native-android-arm64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-android-arm64/6.5.0/jar) + * [**qtjambi-printsupport-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport/6.5.1/jar) + * [**qtjambi-printsupport-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-windows-x64/6.5.1/jar) + * [**qtjambi-printsupport-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-linux-x64/6.5.1/jar) + * [**qtjambi-printsupport-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-macos/6.5.1/jar) + * [**qtjambi-printsupport-native-android-x86-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-android-x86/6.5.1/jar) + * [**qtjambi-printsupport-native-android-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-android-x64/6.5.1/jar) + * [**qtjambi-printsupport-native-android-arm-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-android-arm/6.5.1/jar) + * [**qtjambi-printsupport-native-android-arm64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-android-arm64/6.5.1/jar) * [QtQuick3D](https://doc.qt.io/qt-6/qtquick3d-index.html) in module **qtjambi-quick3d**: - * [**qtjambi-quick3d-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d/6.5.0/jar) - * [**qtjambi-quick3d-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-windows-x64/6.5.0/jar) - * [**qtjambi-quick3d-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-linux-x64/6.5.0/jar) - * [**qtjambi-quick3d-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-macos/6.5.0/jar) - * [**qtjambi-quick3d-native-android-x86-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-android-x86/6.5.0/jar) - * [**qtjambi-quick3d-native-android-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-android-x64/6.5.0/jar) - * [**qtjambi-quick3d-native-android-arm-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-android-arm/6.5.0/jar) - * [**qtjambi-quick3d-native-android-arm64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-android-arm64/6.5.0/jar) + * [**qtjambi-quick3d-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d/6.5.1/jar) + * [**qtjambi-quick3d-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-windows-x64/6.5.1/jar) + * [**qtjambi-quick3d-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-linux-x64/6.5.1/jar) + * [**qtjambi-quick3d-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-macos/6.5.1/jar) + * [**qtjambi-quick3d-native-android-x86-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-android-x86/6.5.1/jar) + * [**qtjambi-quick3d-native-android-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-android-x64/6.5.1/jar) + * [**qtjambi-quick3d-native-android-arm-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-android-arm/6.5.1/jar) + * [**qtjambi-quick3d-native-android-arm64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-android-arm64/6.5.1/jar) * [QtQuickWidgets](https://doc.qt.io/qt-6/qtquickwidgets-module.html) in module **qtjambi-quickwidgets**: - * [**qtjambi-quickwidgets-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets/6.5.0/jar) - * [**qtjambi-quickwidgets-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-windows-x64/6.5.0/jar) - * [**qtjambi-quickwidgets-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-linux-x64/6.5.0/jar) - * [**qtjambi-quickwidgets-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-macos/6.5.0/jar) - * [**qtjambi-quickwidgets-native-android-x86-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-android-x86/6.5.0/jar) - * [**qtjambi-quickwidgets-native-android-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-android-x64/6.5.0/jar) - * [**qtjambi-quickwidgets-native-android-arm-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-android-arm/6.5.0/jar) - * [**qtjambi-quickwidgets-native-android-arm64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-android-arm64/6.5.0/jar) + * [**qtjambi-quickwidgets-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets/6.5.1/jar) + * [**qtjambi-quickwidgets-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-windows-x64/6.5.1/jar) + * [**qtjambi-quickwidgets-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-linux-x64/6.5.1/jar) + * [**qtjambi-quickwidgets-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-macos/6.5.1/jar) + * [**qtjambi-quickwidgets-native-android-x86-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-android-x86/6.5.1/jar) + * [**qtjambi-quickwidgets-native-android-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-android-x64/6.5.1/jar) + * [**qtjambi-quickwidgets-native-android-arm-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-android-arm/6.5.1/jar) + * [**qtjambi-quickwidgets-native-android-arm64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-android-arm64/6.5.1/jar) * [QtRemoteObjects](https://doc.qt.io/qt-6/qtremoteobjects-module.html) in module **qtjambi-remoteobjects**: - * [**qtjambi-remoteobjects-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects/6.5.0/jar) - * [**qtjambi-remoteobjects-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-windows-x64/6.5.0/jar) - * [**qtjambi-remoteobjects-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-linux-x64/6.5.0/jar) - * [**qtjambi-remoteobjects-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-macos/6.5.0/jar) - * [**qtjambi-remoteobjects-native-android-x86-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-android-x86/6.5.0/jar) - * [**qtjambi-remoteobjects-native-android-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-android-x64/6.5.0/jar) - * [**qtjambi-remoteobjects-native-android-arm-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-android-arm/6.5.0/jar) - * [**qtjambi-remoteobjects-native-android-arm64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-android-arm64/6.5.0/jar) + * [**qtjambi-remoteobjects-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects/6.5.1/jar) + * [**qtjambi-remoteobjects-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-windows-x64/6.5.1/jar) + * [**qtjambi-remoteobjects-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-linux-x64/6.5.1/jar) + * [**qtjambi-remoteobjects-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-macos/6.5.1/jar) + * [**qtjambi-remoteobjects-native-android-x86-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-android-x86/6.5.1/jar) + * [**qtjambi-remoteobjects-native-android-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-android-x64/6.5.1/jar) + * [**qtjambi-remoteobjects-native-android-arm-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-android-arm/6.5.1/jar) + * [**qtjambi-remoteobjects-native-android-arm64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-android-arm64/6.5.1/jar) * [QtSCXML](https://doc.qt.io/qt-6/qtscxml-index.html) in module **qtjambi-scxml**: - * [**qtjambi-scxml-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml/6.5.0/jar) - * [**qtjambi-scxml-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-windows-x64/6.5.0/jar) - * [**qtjambi-scxml-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-linux-x64/6.5.0/jar) - * [**qtjambi-scxml-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-macos/6.5.0/jar) - * [**qtjambi-scxml-native-android-x86-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-android-x86/6.5.0/jar) - * [**qtjambi-scxml-native-android-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-android-x64/6.5.0/jar) - * [**qtjambi-scxml-native-android-arm-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-android-arm/6.5.0/jar) - * [**qtjambi-scxml-native-android-arm64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-android-arm64/6.5.0/jar) + * [**qtjambi-scxml-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml/6.5.1/jar) + * [**qtjambi-scxml-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-windows-x64/6.5.1/jar) + * [**qtjambi-scxml-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-linux-x64/6.5.1/jar) + * [**qtjambi-scxml-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-macos/6.5.1/jar) + * [**qtjambi-scxml-native-android-x86-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-android-x86/6.5.1/jar) + * [**qtjambi-scxml-native-android-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-android-x64/6.5.1/jar) + * [**qtjambi-scxml-native-android-arm-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-android-arm/6.5.1/jar) + * [**qtjambi-scxml-native-android-arm64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-android-arm64/6.5.1/jar) * [QtSensors](https://doc.qt.io/qt-6/qtsensors-index.html) in module **qtjambi-sensors**: - * [**qtjambi-sensors-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors/6.5.0/jar) - * [**qtjambi-sensors-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-windows-x64/6.5.0/jar) - * [**qtjambi-sensors-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-linux-x64/6.5.0/jar) - * [**qtjambi-sensors-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-macos/6.5.0/jar) - * [**qtjambi-sensors-native-android-x86-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-android-x86/6.5.0/jar) - * [**qtjambi-sensors-native-android-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-android-x64/6.5.0/jar) - * [**qtjambi-sensors-native-android-arm-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-android-arm/6.5.0/jar) - * [**qtjambi-sensors-native-android-arm64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-android-arm64/6.5.0/jar) + * [**qtjambi-sensors-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors/6.5.1/jar) + * [**qtjambi-sensors-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-windows-x64/6.5.1/jar) + * [**qtjambi-sensors-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-linux-x64/6.5.1/jar) + * [**qtjambi-sensors-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-macos/6.5.1/jar) + * [**qtjambi-sensors-native-android-x86-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-android-x86/6.5.1/jar) + * [**qtjambi-sensors-native-android-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-android-x64/6.5.1/jar) + * [**qtjambi-sensors-native-android-arm-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-android-arm/6.5.1/jar) + * [**qtjambi-sensors-native-android-arm64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-android-arm64/6.5.1/jar) * [QtSerialBus](https://doc.qt.io/qt-6/qtserialbus-index.html) in module **qtjambi-serialbus**: - * [**qtjambi-serialbus-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus/6.5.0/jar) - * [**qtjambi-serialbus-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-windows-x64/6.5.0/jar) - * [**qtjambi-serialbus-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-linux-x64/6.5.0/jar) - * [**qtjambi-serialbus-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-macos/6.5.0/jar) - * [**qtjambi-serialbus-native-android-x86-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-android-x86/6.5.0/jar) - * [**qtjambi-serialbus-native-android-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-android-x64/6.5.0/jar) - * [**qtjambi-serialbus-native-android-arm-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-android-arm/6.5.0/jar) - * [**qtjambi-serialbus-native-android-arm64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-android-arm64/6.5.0/jar) + * [**qtjambi-serialbus-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus/6.5.1/jar) + * [**qtjambi-serialbus-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-windows-x64/6.5.1/jar) + * [**qtjambi-serialbus-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-linux-x64/6.5.1/jar) + * [**qtjambi-serialbus-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-macos/6.5.1/jar) + * [**qtjambi-serialbus-native-android-x86-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-android-x86/6.5.1/jar) + * [**qtjambi-serialbus-native-android-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-android-x64/6.5.1/jar) + * [**qtjambi-serialbus-native-android-arm-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-android-arm/6.5.1/jar) + * [**qtjambi-serialbus-native-android-arm64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-android-arm64/6.5.1/jar) * [QtSerialPort](https://doc.qt.io/qt-6/qtserialport-index.html) in module **qtjambi-serialport**: - * [**qtjambi-serialport-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport/6.5.0/jar) - * [**qtjambi-serialport-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-windows-x64/6.5.0/jar) - * [**qtjambi-serialport-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-linux-x64/6.5.0/jar) - * [**qtjambi-serialport-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-macos/6.5.0/jar) - * [**qtjambi-serialport-native-android-x86-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-android-x86/6.5.0/jar) - * [**qtjambi-serialport-native-android-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-android-x64/6.5.0/jar) - * [**qtjambi-serialport-native-android-arm-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-android-arm/6.5.0/jar) - * [**qtjambi-serialport-native-android-arm64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-android-arm64/6.5.0/jar) + * [**qtjambi-serialport-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport/6.5.1/jar) + * [**qtjambi-serialport-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-windows-x64/6.5.1/jar) + * [**qtjambi-serialport-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-linux-x64/6.5.1/jar) + * [**qtjambi-serialport-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-macos/6.5.1/jar) + * [**qtjambi-serialport-native-android-x86-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-android-x86/6.5.1/jar) + * [**qtjambi-serialport-native-android-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-android-x64/6.5.1/jar) + * [**qtjambi-serialport-native-android-arm-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-android-arm/6.5.1/jar) + * [**qtjambi-serialport-native-android-arm64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-android-arm64/6.5.1/jar) * [QtSql](https://doc.qt.io/qt-6/qtsql-index.html) in module **qtjambi-sql**: - * [**qtjambi-sql-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql/6.5.0/jar) - * [**qtjambi-sql-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-windows-x64/6.5.0/jar) - * [**qtjambi-sql-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-linux-x64/6.5.0/jar) - * [**qtjambi-sql-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-macos/6.5.0/jar) - * [**qtjambi-sql-native-android-x86-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-android-x86/6.5.0/jar) - * [**qtjambi-sql-native-android-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-android-x64/6.5.0/jar) - * [**qtjambi-sql-native-android-arm-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-android-arm/6.5.0/jar) - * [**qtjambi-sql-native-android-arm64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-android-arm64/6.5.0/jar) + * [**qtjambi-sql-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql/6.5.1/jar) + * [**qtjambi-sql-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-windows-x64/6.5.1/jar) + * [**qtjambi-sql-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-linux-x64/6.5.1/jar) + * [**qtjambi-sql-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-macos/6.5.1/jar) + * [**qtjambi-sql-native-android-x86-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-android-x86/6.5.1/jar) + * [**qtjambi-sql-native-android-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-android-x64/6.5.1/jar) + * [**qtjambi-sql-native-android-arm-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-android-arm/6.5.1/jar) + * [**qtjambi-sql-native-android-arm64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-android-arm64/6.5.1/jar) * [QtSvg](https://doc.qt.io/qt-6/qtsvg-index.html) in module **qtjambi-svg**: - * [**qtjambi-svg-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg/6.5.0/jar) - * [**qtjambi-svg-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-windows-x64/6.5.0/jar) - * [**qtjambi-svg-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-linux-x64/6.5.0/jar) - * [**qtjambi-svg-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-macos/6.5.0/jar) - * [**qtjambi-svg-native-android-x86-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-android-x86/6.5.0/jar) - * [**qtjambi-svg-native-android-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-android-x64/6.5.0/jar) - * [**qtjambi-svg-native-android-arm-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-android-arm/6.5.0/jar) - * [**qtjambi-svg-native-android-arm64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-android-arm64/6.5.0/jar) + * [**qtjambi-svg-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg/6.5.1/jar) + * [**qtjambi-svg-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-windows-x64/6.5.1/jar) + * [**qtjambi-svg-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-linux-x64/6.5.1/jar) + * [**qtjambi-svg-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-macos/6.5.1/jar) + * [**qtjambi-svg-native-android-x86-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-android-x86/6.5.1/jar) + * [**qtjambi-svg-native-android-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-android-x64/6.5.1/jar) + * [**qtjambi-svg-native-android-arm-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-android-arm/6.5.1/jar) + * [**qtjambi-svg-native-android-arm64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-android-arm64/6.5.1/jar) * [QtSvgWidgets](https://doc.qt.io/qt-6/qtsvg-index.html) in module **qtjambi-svgwidgets**: - * [**qtjambi-svgwidgets-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets/6.5.0/jar) - * [**qtjambi-svgwidgets-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets-native-windows-x64/6.5.0/jar) - * [**qtjambi-svgwidgets-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets-native-linux-x64/6.5.0/jar) - * [**qtjambi-svgwidgets-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets-native-macos/6.5.0/jar) - * [**qtjambi-svgwidgets-native-android-x86-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets-native-android-x86/6.5.0/jar) - * [**qtjambi-svgwidgets-native-android-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets-native-android-x64/6.5.0/jar) - * [**qtjambi-svgwidgets-native-android-arm-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets-native-android-arm/6.5.0/jar) - * [**qtjambi-svgwidgets-native-android-arm64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets-native-android-arm64/6.5.0/jar) + * [**qtjambi-svgwidgets-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets/6.5.1/jar) + * [**qtjambi-svgwidgets-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets-native-windows-x64/6.5.1/jar) + * [**qtjambi-svgwidgets-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets-native-linux-x64/6.5.1/jar) + * [**qtjambi-svgwidgets-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets-native-macos/6.5.1/jar) + * [**qtjambi-svgwidgets-native-android-x86-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets-native-android-x86/6.5.1/jar) + * [**qtjambi-svgwidgets-native-android-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets-native-android-x64/6.5.1/jar) + * [**qtjambi-svgwidgets-native-android-arm-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets-native-android-arm/6.5.1/jar) + * [**qtjambi-svgwidgets-native-android-arm64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets-native-android-arm64/6.5.1/jar) * [QtStateMachine](https://doc.qt.io/qt-6/qtstatemachine-index.html) in module **qtjambi-statemachine**: - * [**qtjambi-statemachine-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine/6.5.0/jar) - * [**qtjambi-statemachine-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine-native-windows-x64/6.5.0/jar) - * [**qtjambi-statemachine-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine-native-linux-x64/6.5.0/jar) - * [**qtjambi-statemachine-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine-native-macos/6.5.0/jar) - * [**qtjambi-statemachine-native-android-x86-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine-native-android-x86/6.5.0/jar) - * [**qtjambi-statemachine-native-android-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine-native-android-x64/6.5.0/jar) - * [**qtjambi-statemachine-native-android-arm-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine-native-android-arm/6.5.0/jar) - * [**qtjambi-statemachine-native-android-arm64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine-native-android-arm64/6.5.0/jar) + * [**qtjambi-statemachine-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine/6.5.1/jar) + * [**qtjambi-statemachine-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine-native-windows-x64/6.5.1/jar) + * [**qtjambi-statemachine-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine-native-linux-x64/6.5.1/jar) + * [**qtjambi-statemachine-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine-native-macos/6.5.1/jar) + * [**qtjambi-statemachine-native-android-x86-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine-native-android-x86/6.5.1/jar) + * [**qtjambi-statemachine-native-android-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine-native-android-x64/6.5.1/jar) + * [**qtjambi-statemachine-native-android-arm-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine-native-android-arm/6.5.1/jar) + * [**qtjambi-statemachine-native-android-arm64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine-native-android-arm64/6.5.1/jar) * [QtUITools](https://doc.qt.io/qt-6/qtuitools-index.html) in module **qtjambi-uitools**: - * [**qtjambi-uitools-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools/6.5.0/jar) - * [**qtjambi-uitools-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-windows-x64/6.5.0/jar) - * [**qtjambi-uitools-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-linux-x64/6.5.0/jar) - * [**qtjambi-uitools-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-macos/6.5.0/jar) - * [**qtjambi-uitools-native-android-x86-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-android-x86/6.5.0/jar) - * [**qtjambi-uitools-native-android-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-android-x64/6.5.0/jar) - * [**qtjambi-uitools-native-android-arm-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-android-arm/6.5.0/jar) - * [**qtjambi-uitools-native-android-arm64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-android-arm64/6.5.0/jar) + * [**qtjambi-uitools-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools/6.5.1/jar) + * [**qtjambi-uitools-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-windows-x64/6.5.1/jar) + * [**qtjambi-uitools-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-linux-x64/6.5.1/jar) + * [**qtjambi-uitools-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-macos/6.5.1/jar) + * [**qtjambi-uitools-native-android-x86-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-android-x86/6.5.1/jar) + * [**qtjambi-uitools-native-android-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-android-x64/6.5.1/jar) + * [**qtjambi-uitools-native-android-arm-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-android-arm/6.5.1/jar) + * [**qtjambi-uitools-native-android-arm64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-android-arm64/6.5.1/jar) * [QtWebChannel](https://doc.qt.io/qt-6/qtwebchannel-index.html) in module **qtjambi-webchannel**: - * [**qtjambi-webchannel-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel/6.5.0/jar) - * [**qtjambi-webchannel-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-windows-x64/6.5.0/jar) - * [**qtjambi-webchannel-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-linux-x64/6.5.0/jar) - * [**qtjambi-webchannel-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-macos/6.5.0/jar) - * [**qtjambi-webchannel-native-android-x86-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-android-x86/6.5.0/jar) - * [**qtjambi-webchannel-native-android-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-android-x64/6.5.0/jar) - * [**qtjambi-webchannel-native-android-arm-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-android-arm/6.5.0/jar) - * [**qtjambi-webchannel-native-android-arm64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-android-arm64/6.5.0/jar) + * [**qtjambi-webchannel-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel/6.5.1/jar) + * [**qtjambi-webchannel-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-windows-x64/6.5.1/jar) + * [**qtjambi-webchannel-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-linux-x64/6.5.1/jar) + * [**qtjambi-webchannel-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-macos/6.5.1/jar) + * [**qtjambi-webchannel-native-android-x86-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-android-x86/6.5.1/jar) + * [**qtjambi-webchannel-native-android-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-android-x64/6.5.1/jar) + * [**qtjambi-webchannel-native-android-arm-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-android-arm/6.5.1/jar) + * [**qtjambi-webchannel-native-android-arm64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-android-arm64/6.5.1/jar) * [QtWebEngineCore](https://doc.qt.io/qt-6/qtwebengine-index.html) in module **qtjambi-webenginecore**: - * [**qtjambi-webenginecore-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginecore/6.5.0/jar) - * [**qtjambi-webenginecore-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginecore-native-windows-x64/6.5.0/jar) - * [**qtjambi-webenginecore-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginecore-native-linux-x64/6.5.0/jar) - * [**qtjambi-webenginecore-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginecore-native-macos/6.5.0/jar) + * [**qtjambi-webenginecore-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginecore/6.5.1/jar) + * [**qtjambi-webenginecore-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginecore-native-windows-x64/6.5.1/jar) + * [**qtjambi-webenginecore-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginecore-native-linux-x64/6.5.1/jar) + * [**qtjambi-webenginecore-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginecore-native-macos/6.5.1/jar) * [QtWebEngineWidgets](https://doc.qt.io/qt-6/qtwebengine-index.html) in module **qtjambi-webenginewidgets**: - * [**qtjambi-webenginewidgets-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginewidgets/6.5.0/jar) - * [**qtjambi-webenginewidgets-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginewidgets-native-windows-x64/6.5.0/jar) - * [**qtjambi-webenginewidgets-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginewidgets-native-linux-x64/6.5.0/jar) - * [**qtjambi-webenginewidgets-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginewidgets-native-macos/6.5.0/jar) + * [**qtjambi-webenginewidgets-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginewidgets/6.5.1/jar) + * [**qtjambi-webenginewidgets-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginewidgets-native-windows-x64/6.5.1/jar) + * [**qtjambi-webenginewidgets-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginewidgets-native-linux-x64/6.5.1/jar) + * [**qtjambi-webenginewidgets-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginewidgets-native-macos/6.5.1/jar) * [QtWebEngineQuick](https://doc.qt.io/qt-6/qtwebengine-index.html) in module **qtjambi-webenginequick**: - * [**qtjambi-webenginequick-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginequick/6.5.0/jar) - * [**qtjambi-webenginequick-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginequick-native-windows-x64/6.5.0/jar) - * [**qtjambi-webenginequick-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginequick-native-linux-x64/6.5.0/jar) - * [**qtjambi-webenginequick-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginequick-native-macos/6.5.0/jar) + * [**qtjambi-webenginequick-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginequick/6.5.1/jar) + * [**qtjambi-webenginequick-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginequick-native-windows-x64/6.5.1/jar) + * [**qtjambi-webenginequick-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginequick-native-linux-x64/6.5.1/jar) + * [**qtjambi-webenginequick-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginequick-native-macos/6.5.1/jar) * [QtWebSockets](https://doc.qt.io/qt-6/qtwebsockets-index.html) in module **qtjambi-websockets**: - * [**qtjambi-websockets-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets/6.5.0/jar) - * [**qtjambi-websockets-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-windows-x64/6.5.0/jar) - * [**qtjambi-websockets-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-linux-x64/6.5.0/jar) - * [**qtjambi-websockets-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-macos/6.5.0/jar) - * [**qtjambi-websockets-native-android-x86-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-android-x86/6.5.0/jar) - * [**qtjambi-websockets-native-android-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-android-x64/6.5.0/jar) - * [**qtjambi-websockets-native-android-arm-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-android-arm/6.5.0/jar) - * [**qtjambi-websockets-native-android-arm64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-android-arm64/6.5.0/jar) + * [**qtjambi-websockets-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets/6.5.1/jar) + * [**qtjambi-websockets-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-windows-x64/6.5.1/jar) + * [**qtjambi-websockets-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-linux-x64/6.5.1/jar) + * [**qtjambi-websockets-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-macos/6.5.1/jar) + * [**qtjambi-websockets-native-android-x86-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-android-x86/6.5.1/jar) + * [**qtjambi-websockets-native-android-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-android-x64/6.5.1/jar) + * [**qtjambi-websockets-native-android-arm-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-android-arm/6.5.1/jar) + * [**qtjambi-websockets-native-android-arm64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-android-arm64/6.5.1/jar) * [QtWebView](https://doc.qt.io/qt-6/qtwebview-index.html) in module **qtjambi-webview**: - * [**qtjambi-webview-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview/6.5.0/jar) - * [**qtjambi-webview-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-windows-x64/6.5.0/jar) - * [**qtjambi-webview-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-linux-x64/6.5.0/jar) - * [**qtjambi-webview-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-macos/6.5.0/jar) - * [**qtjambi-webview-native-android-x86-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-android-x86/6.5.0/jar) - * [**qtjambi-webview-native-android-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-android-x64/6.5.0/jar) - * [**qtjambi-webview-native-android-arm-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-android-arm/6.5.0/jar) - * [**qtjambi-webview-native-android-arm64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-android-arm64/6.5.0/jar) + * [**qtjambi-webview-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview/6.5.1/jar) + * [**qtjambi-webview-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-windows-x64/6.5.1/jar) + * [**qtjambi-webview-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-linux-x64/6.5.1/jar) + * [**qtjambi-webview-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-macos/6.5.1/jar) + * [**qtjambi-webview-native-android-x86-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-android-x86/6.5.1/jar) + * [**qtjambi-webview-native-android-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-android-x64/6.5.1/jar) + * [**qtjambi-webview-native-android-arm-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-android-arm/6.5.1/jar) + * [**qtjambi-webview-native-android-arm64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-android-arm64/6.5.1/jar) * [QtVirtualKeyboard](https://doc.qt.io/qt-6/qtvirtualkeyboard-index.html) in module **qtjambi-virtualkeyboard**: - * [**qtjambi-virtualkeyboard-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard/6.5.0/jar) - * [**qtjambi-virtualkeyboard-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-windows-x64/6.5.0/jar) - * [**qtjambi-virtualkeyboard-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-linux-x64/6.5.0/jar) - * [**qtjambi-virtualkeyboard-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-macos/6.5.0/jar) - * [**qtjambi-virtualkeyboard-native-android-x86-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-android-x86/6.5.0/jar) - * [**qtjambi-virtualkeyboard-native-android-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-android-x64/6.5.0/jar) - * [**qtjambi-virtualkeyboard-native-android-arm-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-android-arm/6.5.0/jar) - * [**qtjambi-virtualkeyboard-native-android-arm64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-android-arm64/6.5.0/jar) + * [**qtjambi-virtualkeyboard-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard/6.5.1/jar) + * [**qtjambi-virtualkeyboard-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-windows-x64/6.5.1/jar) + * [**qtjambi-virtualkeyboard-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-linux-x64/6.5.1/jar) + * [**qtjambi-virtualkeyboard-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-macos/6.5.1/jar) + * [**qtjambi-virtualkeyboard-native-android-x86-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-android-x86/6.5.1/jar) + * [**qtjambi-virtualkeyboard-native-android-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-android-x64/6.5.1/jar) + * [**qtjambi-virtualkeyboard-native-android-arm-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-android-arm/6.5.1/jar) + * [**qtjambi-virtualkeyboard-native-android-arm64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-android-arm64/6.5.1/jar) * [QtXml](https://doc.qt.io/qt-6/qtxml-index.html) in module **qtjambi-xml**: - * [**qtjambi-xml-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml/6.5.0/jar) - * [**qtjambi-xml-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-windows-x64/6.5.0/jar) - * [**qtjambi-xml-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-linux-x64/6.5.0/jar) - * [**qtjambi-xml-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-macos/6.5.0/jar) - * [**qtjambi-xml-native-android-x86-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-android-x86/6.5.0/jar) - * [**qtjambi-xml-native-android-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-android-x64/6.5.0/jar) - * [**qtjambi-xml-native-android-arm-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-android-arm/6.5.0/jar) - * [**qtjambi-xml-native-android-arm64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-android-arm64/6.5.0/jar) + * [**qtjambi-xml-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml/6.5.1/jar) + * [**qtjambi-xml-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-windows-x64/6.5.1/jar) + * [**qtjambi-xml-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-linux-x64/6.5.1/jar) + * [**qtjambi-xml-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-macos/6.5.1/jar) + * [**qtjambi-xml-native-android-x86-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-android-x86/6.5.1/jar) + * [**qtjambi-xml-native-android-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-android-x64/6.5.1/jar) + * [**qtjambi-xml-native-android-arm-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-android-arm/6.5.1/jar) + * [**qtjambi-xml-native-android-arm64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-android-arm64/6.5.1/jar) * [QtDesigner](https://doc.qt.io/qt-6/qtdesigner-manual.html) in module **qtjambi-designer**: - * [**qtjambi-designer-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer/6.5.0/jar) - * [**qtjambi-designer-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-windows-x64/6.5.0/jar) - * [**qtjambi-designer-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-linux-x64/6.5.0/jar) - * [**qtjambi-designer-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-macos/6.5.0/jar) - * [**qtjambi-designer-native-android-x86-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-android-x86/6.5.0/jar) - * [**qtjambi-designer-native-android-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-android-x64/6.5.0/jar) - * [**qtjambi-designer-native-android-arm-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-android-arm/6.5.0/jar) - * [**qtjambi-designer-native-android-arm64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-android-arm64/6.5.0/jar) + * [**qtjambi-designer-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer/6.5.1/jar) + * [**qtjambi-designer-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-windows-x64/6.5.1/jar) + * [**qtjambi-designer-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-linux-x64/6.5.1/jar) + * [**qtjambi-designer-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-macos/6.5.1/jar) + * [**qtjambi-designer-native-android-x86-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-android-x86/6.5.1/jar) + * [**qtjambi-designer-native-android-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-android-x64/6.5.1/jar) + * [**qtjambi-designer-native-android-arm-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-android-arm/6.5.1/jar) + * [**qtjambi-designer-native-android-arm64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-android-arm64/6.5.1/jar) * [QtPDF](https://doc.qt.io/qt-6/qtpdf-index.html) in modules **qtjambi-pdf** and **qtjambi-pdfwidgets**: - * [**qtjambi-pdf-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-pdf/6.5.0/jar) - * [**qtjambi-pdf-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-pdf-native-windows-x64/6.5.0/jar) - * [**qtjambi-pdf-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-pdf-native-linux-x64/6.5.0/jar) - * [**qtjambi-pdf-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-pdf-native-macos/6.5.0/jar) - * [**qtjambi-pdfwidgets-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-pdfwidgets/6.5.0/jar) - * [**qtjambi-pdfwidgets-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-pdfwidgets-native-windows-x64/6.5.0/jar) - * [**qtjambi-pdfwidgets-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-pdfwidgets-native-linux-x64/6.5.0/jar) - * [**qtjambi-pdfwidgets-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-pdfwidgets-native-macos/6.5.0/jar) + * [**qtjambi-pdf-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-pdf/6.5.1/jar) + * [**qtjambi-pdf-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-pdf-native-windows-x64/6.5.1/jar) + * [**qtjambi-pdf-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-pdf-native-linux-x64/6.5.1/jar) + * [**qtjambi-pdf-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-pdf-native-macos/6.5.1/jar) + * [**qtjambi-pdfwidgets-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-pdfwidgets/6.5.1/jar) + * [**qtjambi-pdfwidgets-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-pdfwidgets-native-windows-x64/6.5.1/jar) + * [**qtjambi-pdfwidgets-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-pdfwidgets-native-linux-x64/6.5.1/jar) + * [**qtjambi-pdfwidgets-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-pdfwidgets-native-macos/6.5.1/jar) * [QtHttpServer](https://doc.qt.io/qt-6/qthttpserver-index.html) in module **qtjambi-httpserver** - * [**qtjambi-httpserver-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-httpserver/6.5.0/jar) - * [**qtjambi-httpserver-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-httpserver-native-windows-x64/6.5.0/jar) - * [**qtjambi-httpserver-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-httpserver-native-linux-x64/6.5.0/jar) - * [**qtjambi-httpserver-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-httpserver-native-macos/6.5.0/jar) - * [**qtjambi-httpserver-native-android-x86-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-httpserver-native-android-x86/6.5.0/jar) - * [**qtjambi-httpserver-native-android-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-httpserver-native-android-x64/6.5.0/jar) - * [**qtjambi-httpserver-native-android-arm-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-httpserver-native-android-arm/6.5.0/jar) - * [**qtjambi-httpserver-native-android-arm64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-httpserver-native-android-arm64/6.5.0/jar) + * [**qtjambi-httpserver-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-httpserver/6.5.1/jar) + * [**qtjambi-httpserver-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-httpserver-native-windows-x64/6.5.1/jar) + * [**qtjambi-httpserver-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-httpserver-native-linux-x64/6.5.1/jar) + * [**qtjambi-httpserver-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-httpserver-native-macos/6.5.1/jar) + * [**qtjambi-httpserver-native-android-x86-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-httpserver-native-android-x86/6.5.1/jar) + * [**qtjambi-httpserver-native-android-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-httpserver-native-android-x64/6.5.1/jar) + * [**qtjambi-httpserver-native-android-arm-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-httpserver-native-android-arm/6.5.1/jar) + * [**qtjambi-httpserver-native-android-arm64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-httpserver-native-android-arm64/6.5.1/jar) ### Qt6 Platform-dependent Add-Ons * [Active Qt (Windows only)](https://doc.qt.io/qt-6/activeqt-manual.html) in module **qtjambi-activex**: - * [**qtjambi-activex-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-activex/6.5.0/jar) - * [**qtjambi-activex-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-activex-native-windows-x64/6.5.0/jar) + * [**qtjambi-activex-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-activex/6.5.1/jar) + * [**qtjambi-activex-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-activex-native-windows-x64/6.5.1/jar) ### Qt3D * [Qt3DCore](https://doc.qt.io/qt-6/qt3d-index.html) in module **qtjambi-qt3dcore**: - * [**qtjambi-qt3dcore-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore/6.5.0/jar) - * [**qtjambi-qt3dcore-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-windows-x64/6.5.0/jar) - * [**qtjambi-qt3dcore-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-linux-x64/6.5.0/jar) - * [**qtjambi-qt3dcore-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-macos/6.5.0/jar) - * [**qtjambi-qt3dcore-native-android-x86-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-android-x86/6.5.0/jar) - * [**qtjambi-qt3dcore-native-android-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-android-x64/6.5.0/jar) - * [**qtjambi-qt3dcore-native-android-arm-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-android-arm/6.5.0/jar) - * [**qtjambi-qt3dcore-native-android-arm64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-android-arm64/6.5.0/jar) + * [**qtjambi-qt3dcore-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore/6.5.1/jar) + * [**qtjambi-qt3dcore-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-windows-x64/6.5.1/jar) + * [**qtjambi-qt3dcore-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-linux-x64/6.5.1/jar) + * [**qtjambi-qt3dcore-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-macos/6.5.1/jar) + * [**qtjambi-qt3dcore-native-android-x86-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-android-x86/6.5.1/jar) + * [**qtjambi-qt3dcore-native-android-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-android-x64/6.5.1/jar) + * [**qtjambi-qt3dcore-native-android-arm-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-android-arm/6.5.1/jar) + * [**qtjambi-qt3dcore-native-android-arm64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-android-arm64/6.5.1/jar) * [Qt3DRender](https://doc.qt.io/qt-6/qt3d-index.html) in module **qtjambi-qt3drender**: - * [**qtjambi-qt3drender-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender/6.5.0/jar) - * [**qtjambi-qt3drender-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-windows-x64/6.5.0/jar) - * [**qtjambi-qt3drender-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-linux-x64/6.5.0/jar) - * [**qtjambi-qt3drender-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-macos/6.5.0/jar) - * [**qtjambi-qt3drender-native-android-x86-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-android-x86/6.5.0/jar) - * [**qtjambi-qt3drender-native-android-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-android-x64/6.5.0/jar) - * [**qtjambi-qt3drender-native-android-arm-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-android-arm/6.5.0/jar) - * [**qtjambi-qt3drender-native-android-arm64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-android-arm64/6.5.0/jar) + * [**qtjambi-qt3drender-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender/6.5.1/jar) + * [**qtjambi-qt3drender-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-windows-x64/6.5.1/jar) + * [**qtjambi-qt3drender-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-linux-x64/6.5.1/jar) + * [**qtjambi-qt3drender-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-macos/6.5.1/jar) + * [**qtjambi-qt3drender-native-android-x86-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-android-x86/6.5.1/jar) + * [**qtjambi-qt3drender-native-android-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-android-x64/6.5.1/jar) + * [**qtjambi-qt3drender-native-android-arm-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-android-arm/6.5.1/jar) + * [**qtjambi-qt3drender-native-android-arm64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-android-arm64/6.5.1/jar) * [Qt3DAnimation](https://doc.qt.io/qt-6/qt3d-index.html) in module **qtjambi-qt3danimation**: - * [**qtjambi-qt3danimation-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation/6.5.0/jar) - * [**qtjambi-qt3danimation-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-windows-x64/6.5.0/jar) - * [**qtjambi-qt3danimation-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-linux-x64/6.5.0/jar) - * [**qtjambi-qt3danimation-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-macos/6.5.0/jar) - * [**qtjambi-qt3danimation-native-android-x86-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-android-x86/6.5.0/jar) - * [**qtjambi-qt3danimation-native-android-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-android-x64/6.5.0/jar) - * [**qtjambi-qt3danimation-native-android-arm-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-android-arm/6.5.0/jar) - * [**qtjambi-qt3danimation-native-android-arm64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-android-arm64/6.5.0/jar) + * [**qtjambi-qt3danimation-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation/6.5.1/jar) + * [**qtjambi-qt3danimation-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-windows-x64/6.5.1/jar) + * [**qtjambi-qt3danimation-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-linux-x64/6.5.1/jar) + * [**qtjambi-qt3danimation-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-macos/6.5.1/jar) + * [**qtjambi-qt3danimation-native-android-x86-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-android-x86/6.5.1/jar) + * [**qtjambi-qt3danimation-native-android-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-android-x64/6.5.1/jar) + * [**qtjambi-qt3danimation-native-android-arm-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-android-arm/6.5.1/jar) + * [**qtjambi-qt3danimation-native-android-arm64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-android-arm64/6.5.1/jar) * [Qt3DExtras](https://doc.qt.io/qt-6/qt3d-index.html) in module **qtjambi-qt3dextras**: - * [**qtjambi-qt3dextras-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras/6.5.0/jar) - * [**qtjambi-qt3dextras-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-windows-x64/6.5.0/jar) - * [**qtjambi-qt3dextras-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-linux-x64/6.5.0/jar) - * [**qtjambi-qt3dextras-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-macos/6.5.0/jar) - * [**qtjambi-qt3dextras-native-android-x86-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-android-x86/6.5.0/jar) - * [**qtjambi-qt3dextras-native-android-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-android-x64/6.5.0/jar) - * [**qtjambi-qt3dextras-native-android-arm-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-android-arm/6.5.0/jar) - * [**qtjambi-qt3dextras-native-android-arm64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-android-arm64/6.5.0/jar) + * [**qtjambi-qt3dextras-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras/6.5.1/jar) + * [**qtjambi-qt3dextras-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-windows-x64/6.5.1/jar) + * [**qtjambi-qt3dextras-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-linux-x64/6.5.1/jar) + * [**qtjambi-qt3dextras-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-macos/6.5.1/jar) + * [**qtjambi-qt3dextras-native-android-x86-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-android-x86/6.5.1/jar) + * [**qtjambi-qt3dextras-native-android-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-android-x64/6.5.1/jar) + * [**qtjambi-qt3dextras-native-android-arm-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-android-arm/6.5.1/jar) + * [**qtjambi-qt3dextras-native-android-arm64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-android-arm64/6.5.1/jar) * [Qt3DInput](https://doc.qt.io/qt-6/qt3d-index.html) in module **qtjambi-qt3dinput**: - * [**qtjambi-qt3dinput-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput/6.5.0/jar) - * [**qtjambi-qt3dinput-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-windows-x64/6.5.0/jar) - * [**qtjambi-qt3dinput-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-linux-x64/6.5.0/jar) - * [**qtjambi-qt3dinput-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-macos/6.5.0/jar) - * [**qtjambi-qt3dinput-native-android-x86-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-android-x86/6.5.0/jar) - * [**qtjambi-qt3dinput-native-android-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-android-x64/6.5.0/jar) - * [**qtjambi-qt3dinput-native-android-arm-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-android-arm/6.5.0/jar) - * [**qtjambi-qt3dinput-native-android-arm64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-android-arm64/6.5.0/jar) + * [**qtjambi-qt3dinput-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput/6.5.1/jar) + * [**qtjambi-qt3dinput-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-windows-x64/6.5.1/jar) + * [**qtjambi-qt3dinput-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-linux-x64/6.5.1/jar) + * [**qtjambi-qt3dinput-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-macos/6.5.1/jar) + * [**qtjambi-qt3dinput-native-android-x86-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-android-x86/6.5.1/jar) + * [**qtjambi-qt3dinput-native-android-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-android-x64/6.5.1/jar) + * [**qtjambi-qt3dinput-native-android-arm-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-android-arm/6.5.1/jar) + * [**qtjambi-qt3dinput-native-android-arm64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-android-arm64/6.5.1/jar) * [Qt3DLogic](https://doc.qt.io/qt-6/qt3d-index.html) in module **qtjambi-qt3dlogic**: - * [**qtjambi-qt3dlogic-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic/6.5.0/jar) - * [**qtjambi-qt3dlogic-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-windows-x64/6.5.0/jar) - * [**qtjambi-qt3dlogic-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-linux-x64/6.5.0/jar) - * [**qtjambi-qt3dlogic-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-macos/6.5.0/jar) - * [**qtjambi-qt3dlogic-native-android-x86-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-android-x86/6.5.0/jar) - * [**qtjambi-qt3dlogic-native-android-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-android-x64/6.5.0/jar) - * [**qtjambi-qt3dlogic-native-android-arm-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-android-arm/6.5.0/jar) - * [**qtjambi-qt3dlogic-native-android-arm64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-android-arm64/6.5.0/jar) + * [**qtjambi-qt3dlogic-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic/6.5.1/jar) + * [**qtjambi-qt3dlogic-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-windows-x64/6.5.1/jar) + * [**qtjambi-qt3dlogic-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-linux-x64/6.5.1/jar) + * [**qtjambi-qt3dlogic-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-macos/6.5.1/jar) + * [**qtjambi-qt3dlogic-native-android-x86-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-android-x86/6.5.1/jar) + * [**qtjambi-qt3dlogic-native-android-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-android-x64/6.5.1/jar) + * [**qtjambi-qt3dlogic-native-android-arm-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-android-arm/6.5.1/jar) + * [**qtjambi-qt3dlogic-native-android-arm64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-android-arm64/6.5.1/jar) * [Qt3DQuick](https://doc.qt.io/qt-6/qt3d-index.html) in module **qtjambi-qt3dquick**: - * [**qtjambi-qt3dquick-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick/6.5.0/jar) - * [**qtjambi-qt3dquick-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-windows-x64/6.5.0/jar) - * [**qtjambi-qt3dquick-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-linux-x64/6.5.0/jar) - * [**qtjambi-qt3dquick-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-macos/6.5.0/jar) - * [**qtjambi-qt3dquick-native-android-x86-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-android-x86/6.5.0/jar) - * [**qtjambi-qt3dquick-native-android-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-android-x64/6.5.0/jar) - * [**qtjambi-qt3dquick-native-android-arm-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-android-arm/6.5.0/jar) - * [**qtjambi-qt3dquick-native-android-arm64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-android-arm64/6.5.0/jar) + * [**qtjambi-qt3dquick-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick/6.5.1/jar) + * [**qtjambi-qt3dquick-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-windows-x64/6.5.1/jar) + * [**qtjambi-qt3dquick-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-linux-x64/6.5.1/jar) + * [**qtjambi-qt3dquick-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-macos/6.5.1/jar) + * [**qtjambi-qt3dquick-native-android-x86-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-android-x86/6.5.1/jar) + * [**qtjambi-qt3dquick-native-android-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-android-x64/6.5.1/jar) + * [**qtjambi-qt3dquick-native-android-arm-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-android-arm/6.5.1/jar) + * [**qtjambi-qt3dquick-native-android-arm64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-android-arm64/6.5.1/jar) * [Qt3DQuickExtras](https://doc.qt.io/qt-6/qt3d-index.html) in module **qtjambi-qt3dquickextras**: - * [**qtjambi-qt3dquickextras-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras/6.5.0/jar) - * [**qtjambi-qt3dquickextras-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-windows-x64/6.5.0/jar) - * [**qtjambi-qt3dquickextras-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-linux-x64/6.5.0/jar) - * [**qtjambi-qt3dquickextras-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-macos/6.5.0/jar) - * [**qtjambi-qt3dquickextras-native-android-x86-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-android-x86/6.5.0/jar) - * [**qtjambi-qt3dquickextras-native-android-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-android-x64/6.5.0/jar) - * [**qtjambi-qt3dquickextras-native-android-arm-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-android-arm/6.5.0/jar) - * [**qtjambi-qt3dquickextras-native-android-arm64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-android-arm64/6.5.0/jar) + * [**qtjambi-qt3dquickextras-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras/6.5.1/jar) + * [**qtjambi-qt3dquickextras-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-windows-x64/6.5.1/jar) + * [**qtjambi-qt3dquickextras-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-linux-x64/6.5.1/jar) + * [**qtjambi-qt3dquickextras-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-macos/6.5.1/jar) + * [**qtjambi-qt3dquickextras-native-android-x86-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-android-x86/6.5.1/jar) + * [**qtjambi-qt3dquickextras-native-android-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-android-x64/6.5.1/jar) + * [**qtjambi-qt3dquickextras-native-android-arm-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-android-arm/6.5.1/jar) + * [**qtjambi-qt3dquickextras-native-android-arm64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-android-arm64/6.5.1/jar) * [Qt3DQuickScene3D](https://doc.qt.io/qt-6/qt3d-index.html) in module **qtjambi-qt3dquickscene2d**: - * [**qtjambi-qt3dquickscene2d-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d/6.5.0/jar) - * [**qtjambi-qt3dquickscene2d-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-windows-x64/6.5.0/jar) - * [**qtjambi-qt3dquickscene2d-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-linux-x64/6.5.0/jar) - * [**qtjambi-qt3dquickscene2d-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-macos/6.5.0/jar) - * [**qtjambi-qt3dquickscene2d-native-android-x86-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-android-x86/6.5.0/jar) - * [**qtjambi-qt3dquickscene2d-native-android-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-android-x64/6.5.0/jar) - * [**qtjambi-qt3dquickscene2d-native-android-arm-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-android-arm/6.5.0/jar) - * [**qtjambi-qt3dquickscene2d-native-android-arm64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-android-arm64/6.5.0/jar) + * [**qtjambi-qt3dquickscene2d-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d/6.5.1/jar) + * [**qtjambi-qt3dquickscene2d-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-windows-x64/6.5.1/jar) + * [**qtjambi-qt3dquickscene2d-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-linux-x64/6.5.1/jar) + * [**qtjambi-qt3dquickscene2d-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-macos/6.5.1/jar) + * [**qtjambi-qt3dquickscene2d-native-android-x86-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-android-x86/6.5.1/jar) + * [**qtjambi-qt3dquickscene2d-native-android-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-android-x64/6.5.1/jar) + * [**qtjambi-qt3dquickscene2d-native-android-arm-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-android-arm/6.5.1/jar) + * [**qtjambi-qt3dquickscene2d-native-android-arm64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-android-arm64/6.5.1/jar) ### QtJambi Plugins * JDBC Sql Plugin: - * [**qtjambi-plugin-qsqljdbc-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-windows-x64/6.5.0/jar) - * [**qtjambi-plugin-qsqljdbc-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-linux-x64/6.5.0/jar) - * [**qtjambi-plugin-qsqljdbc-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-macos/6.5.0/jar) - * [**qtjambi-plugin-qsqljdbc-native-android-common-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-common/6.5.0/jar) - * [**qtjambi-plugin-qsqljdbc-native-android-x86-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-x86/6.5.0/jar) - * [**qtjambi-plugin-qsqljdbc-native-android-x86-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-x86/6.5.0/jar) - * [**qtjambi-plugin-qsqljdbc-native-android-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-x64/6.5.0/jar) - * [**qtjambi-plugin-qsqljdbc-native-android-arm-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-arm/6.5.0/jar) - * [**qtjambi-plugin-qsqljdbc-native-android-arm64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-arm64/6.5.0/jar) + * [**qtjambi-plugin-qsqljdbc-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-windows-x64/6.5.1/jar) + * [**qtjambi-plugin-qsqljdbc-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-linux-x64/6.5.1/jar) + * [**qtjambi-plugin-qsqljdbc-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-macos/6.5.1/jar) + * [**qtjambi-plugin-qsqljdbc-native-android-common-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-common/6.5.1/jar) + * [**qtjambi-plugin-qsqljdbc-native-android-x86-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-x86/6.5.1/jar) + * [**qtjambi-plugin-qsqljdbc-native-android-x86-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-x86/6.5.1/jar) + * [**qtjambi-plugin-qsqljdbc-native-android-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-x64/6.5.1/jar) + * [**qtjambi-plugin-qsqljdbc-native-android-arm-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-arm/6.5.1/jar) + * [**qtjambi-plugin-qsqljdbc-native-android-arm64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-arm64/6.5.1/jar) ### QtJambi Tools * [QtJambi User Interface Compiler (UIC)](https://doc.qt.io/qt-6/designer-using-a-ui-file.html#compile-time-form-processing): - * [**qtjambi-uic-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic/6.5.0/jar) - * [**qtjambi-uic-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-windows-x64/6.5.0/jar) - * [**qtjambi-uic-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-linux-x64/6.5.0/jar) - * [**qtjambi-uic-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-macos/6.5.0/jar) + * [**qtjambi-uic-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic/6.5.1/jar) + * [**qtjambi-uic-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-windows-x64/6.5.1/jar) + * [**qtjambi-uic-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-linux-x64/6.5.1/jar) + * [**qtjambi-uic-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-macos/6.5.1/jar) * QtJambi Deployer: - * [**qtjambi-deployer-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer/6.5.0/jar) - * [**qtjambi-deployer-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-windows-x64/6.5.0/jar) - * [**qtjambi-deployer-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-linux-x64/6.5.0/jar) - * [**qtjambi-deployer-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-macos/6.5.0/jar) - * [**qtjambi-deployer-native-android-x86-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-android-x86/6.5.0/jar) - * [**qtjambi-deployer-native-android-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-android-x64/6.5.0/jar) - * [**qtjambi-deployer-native-android-arm-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-android-arm/6.5.0/jar) - * [**qtjambi-deployer-native-android-arm64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-android-arm64/6.5.0/jar) + * [**qtjambi-deployer-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer/6.5.1/jar) + * [**qtjambi-deployer-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-windows-x64/6.5.1/jar) + * [**qtjambi-deployer-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-linux-x64/6.5.1/jar) + * [**qtjambi-deployer-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-macos/6.5.1/jar) + * [**qtjambi-deployer-native-android-x86-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-android-x86/6.5.1/jar) + * [**qtjambi-deployer-native-android-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-android-x64/6.5.1/jar) + * [**qtjambi-deployer-native-android-arm-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-android-arm/6.5.1/jar) + * [**qtjambi-deployer-native-android-arm64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-android-arm64/6.5.1/jar) * QtJambi Generator: - * [**qtjambi-generator-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-generator/6.5.0/jar) - * [**qtjambi-generator-native-windows-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-generator-native-windows-x64/6.5.0/jar) - * [**qtjambi-generator-native-linux-x64-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-generator-native-linux-x64/6.5.0/jar) - * [**qtjambi-generator-native-macos-6.5.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-generator-native-macos/6.5.0/jar) + * [**qtjambi-generator-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-generator/6.5.1/jar) + * [**qtjambi-generator-native-windows-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-generator-native-windows-x64/6.5.1/jar) + * [**qtjambi-generator-native-linux-x64-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-generator-native-linux-x64/6.5.1/jar) + * [**qtjambi-generator-native-macos-6.5.1.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-generator-native-macos/6.5.1/jar) ## QtJambi for Qt 5.15 -QtJambi 5.15.14 requires Qt 5.15.x whereas x can be any patch version. +QtJambi 5.15.14 requires Qt 5.15.x whereas x can be any patch version (except **qtjambi-activex**). +This release has been built with Qt 5.15.2. Following Qt 5.15 modules are provided by QtJambi: ### Qt5 Essentials @@ -554,517 +556,517 @@ Following Qt 5.15 modules are provided by QtJambi: * [QtMultimedia](https://doc.qt.io/qt-5/qtmultimedia-index.html) in module **qtjambi-multimedia**: * [**qtjambi-multimedia-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia/5.15.14/jar) * [**qtjambi-multimedia-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-windows-x64/5.15.14/jar) - * [**qtjambi-multimedia-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-linux-x64/5.15.14/jar) - * [**qtjambi-multimedia-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-macos/5.15.14/jar) - * [**qtjambi-multimedia-native-android-x86-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-android-x86/5.15.14/jar) - * [**qtjambi-multimedia-native-android-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-android-x64/5.15.14/jar) - * [**qtjambi-multimedia-native-android-arm-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-android-arm/5.15.14/jar) - * [**qtjambi-multimedia-native-android-arm64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-android-arm64/5.15.14/jar) + * [**qtjambi-multimedia-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-linux-x64/5.15.15/jar) + * [**qtjambi-multimedia-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-macos/5.15.15/jar) + * [**qtjambi-multimedia-native-android-x86-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-android-x86/5.15.15/jar) + * [**qtjambi-multimedia-native-android-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-android-x64/5.15.15/jar) + * [**qtjambi-multimedia-native-android-arm-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-android-arm/5.15.15/jar) + * [**qtjambi-multimedia-native-android-arm64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-android-arm64/5.15.15/jar) * [QtMultimediaWidgets](https://doc.qt.io/qt-5/qtmultimedia-index.html) in module **qtjambi-multimediawidgets**: - * [**qtjambi-multimediawidgets-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets/5.15.14/jar) - * [**qtjambi-multimediawidgets-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-windows-x64/5.15.14/jar) - * [**qtjambi-multimediawidgets-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-linux-x64/5.15.14/jar) - * [**qtjambi-multimediawidgets-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-macos/5.15.14/jar) - * [**qtjambi-multimediawidgets-native-android-x86-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-android-x86/5.15.14/jar) - * [**qtjambi-multimediawidgets-native-android-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-android-x64/5.15.14/jar) - * [**qtjambi-multimediawidgets-native-android-arm-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-android-arm/5.15.14/jar) - * [**qtjambi-multimediawidgets-native-android-arm64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-android-arm64/5.15.14/jar) + * [**qtjambi-multimediawidgets-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets/5.15.15/jar) + * [**qtjambi-multimediawidgets-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-windows-x64/5.15.15/jar) + * [**qtjambi-multimediawidgets-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-linux-x64/5.15.15/jar) + * [**qtjambi-multimediawidgets-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-macos/5.15.15/jar) + * [**qtjambi-multimediawidgets-native-android-x86-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-android-x86/5.15.15/jar) + * [**qtjambi-multimediawidgets-native-android-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-android-x64/5.15.15/jar) + * [**qtjambi-multimediawidgets-native-android-arm-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-android-arm/5.15.15/jar) + * [**qtjambi-multimediawidgets-native-android-arm64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-android-arm64/5.15.15/jar) * [QtNetwork](https://doc.qt.io/qt-5/qtnetwork-index.html) in module **qtjambi-network**: - * [**qtjambi-network-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network/5.15.14/jar) - * [**qtjambi-network-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-windows-x64/5.15.14/jar) - * [**qtjambi-network-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-linux-x64/5.15.14/jar) - * [**qtjambi-network-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-macos/5.15.14/jar) - * [**qtjambi-network-native-android-x86-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-android-x86/5.15.14/jar) - * [**qtjambi-network-native-android-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-android-x64/5.15.14/jar) - * [**qtjambi-network-native-android-arm-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-android-arm/5.15.14/jar) - * [**qtjambi-network-native-android-arm64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-android-arm64/5.15.14/jar) + * [**qtjambi-network-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network/5.15.15/jar) + * [**qtjambi-network-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-windows-x64/5.15.15/jar) + * [**qtjambi-network-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-linux-x64/5.15.15/jar) + * [**qtjambi-network-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-macos/5.15.15/jar) + * [**qtjambi-network-native-android-x86-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-android-x86/5.15.15/jar) + * [**qtjambi-network-native-android-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-android-x64/5.15.15/jar) + * [**qtjambi-network-native-android-arm-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-android-arm/5.15.15/jar) + * [**qtjambi-network-native-android-arm64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-android-arm64/5.15.15/jar) * [QtQml](https://doc.qt.io/qt-5/qtqml-index.html) in module **qtjambi-qml**: - * [**qtjambi-qml-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml/5.15.14/jar) - * [**qtjambi-qml-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-windows-x64/5.15.14/jar) - * [**qtjambi-qml-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-linux-x64/5.15.14/jar) - * [**qtjambi-qml-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-macos/5.15.14/jar) - * [**qtjambi-qml-native-android-x86-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-android-x86/5.15.14/jar) - * [**qtjambi-qml-native-android-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-android-x64/5.15.14/jar) - * [**qtjambi-qml-native-android-arm-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-android-arm/5.15.14/jar) - * [**qtjambi-qml-native-android-arm64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-android-arm64/5.15.14/jar) + * [**qtjambi-qml-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml/5.15.15/jar) + * [**qtjambi-qml-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-windows-x64/5.15.15/jar) + * [**qtjambi-qml-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-linux-x64/5.15.15/jar) + * [**qtjambi-qml-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-macos/5.15.15/jar) + * [**qtjambi-qml-native-android-x86-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-android-x86/5.15.15/jar) + * [**qtjambi-qml-native-android-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-android-x64/5.15.15/jar) + * [**qtjambi-qml-native-android-arm-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-android-arm/5.15.15/jar) + * [**qtjambi-qml-native-android-arm64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-android-arm64/5.15.15/jar) * [QtQuick](https://doc.qt.io/qt-5/qtquick-index.html) in module **qtjambi-quick**: - * [**qtjambi-quick-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick/5.15.14/jar) - * [**qtjambi-quick-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-windows-x64/5.15.14/jar) - * [**qtjambi-quick-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-linux-x64/5.15.14/jar) - * [**qtjambi-quick-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-macos/5.15.14/jar) - * [**qtjambi-quick-native-android-x86-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-android-x86/5.15.14/jar) - * [**qtjambi-quick-native-android-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-android-x64/5.15.14/jar) - * [**qtjambi-quick-native-android-arm-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-android-arm/5.15.14/jar) - * [**qtjambi-quick-native-android-arm64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-android-arm64/5.15.14/jar) + * [**qtjambi-quick-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick/5.15.15/jar) + * [**qtjambi-quick-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-windows-x64/5.15.15/jar) + * [**qtjambi-quick-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-linux-x64/5.15.15/jar) + * [**qtjambi-quick-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-macos/5.15.15/jar) + * [**qtjambi-quick-native-android-x86-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-android-x86/5.15.15/jar) + * [**qtjambi-quick-native-android-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-android-x64/5.15.15/jar) + * [**qtjambi-quick-native-android-arm-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-android-arm/5.15.15/jar) + * [**qtjambi-quick-native-android-arm64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-android-arm64/5.15.15/jar) * [QtQuickControls](https://doc.qt.io/qt-5/qtquickcontrols-index.html) in module **qtjambi-quickcontrols**: - * [**qtjambi-quickcontrols-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols/5.15.14/jar) - * [**qtjambi-quickcontrols-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-windows-x64/5.15.14/jar) - * [**qtjambi-quickcontrols-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-linux-x64/5.15.14/jar) - * [**qtjambi-quickcontrols-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-macos/5.15.14/jar) - * [**qtjambi-quickcontrols-native-android-x86-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-android-x86/5.15.14/jar) - * [**qtjambi-quickcontrols-native-android-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-android-x64/5.15.14/jar) - * [**qtjambi-quickcontrols-native-android-arm-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-android-arm/5.15.14/jar) - * [**qtjambi-quickcontrols-native-android-arm64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-android-arm64/5.15.14/jar) + * [**qtjambi-quickcontrols-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols/5.15.15/jar) + * [**qtjambi-quickcontrols-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-windows-x64/5.15.15/jar) + * [**qtjambi-quickcontrols-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-linux-x64/5.15.15/jar) + * [**qtjambi-quickcontrols-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-macos/5.15.15/jar) + * [**qtjambi-quickcontrols-native-android-x86-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-android-x86/5.15.15/jar) + * [**qtjambi-quickcontrols-native-android-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-android-x64/5.15.15/jar) + * [**qtjambi-quickcontrols-native-android-arm-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-android-arm/5.15.15/jar) + * [**qtjambi-quickcontrols-native-android-arm64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-android-arm64/5.15.15/jar) * [QtQuickTest](https://doc.qt.io/qt-5/qtquicktest-index.html) in module **qtjambi-quicktest**: - * [**qtjambi-quicktest-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest/5.15.14/jar) - * [**qtjambi-quicktest-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-windows-x64/5.15.14/jar) - * [**qtjambi-quicktest-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-linux-x64/5.15.14/jar) - * [**qtjambi-quicktest-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-macos/5.15.14/jar) - * [**qtjambi-quicktest-native-android-x86-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-android-x86/5.15.14/jar) - * [**qtjambi-quicktest-native-android-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-android-x64/5.15.14/jar) - * [**qtjambi-quicktest-native-android-arm-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-android-arm/5.15.14/jar) - * [**qtjambi-quicktest-native-android-arm64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-android-arm64/5.15.14/jar) + * [**qtjambi-quicktest-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest/5.15.15/jar) + * [**qtjambi-quicktest-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-windows-x64/5.15.15/jar) + * [**qtjambi-quicktest-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-linux-x64/5.15.15/jar) + * [**qtjambi-quicktest-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-macos/5.15.15/jar) + * [**qtjambi-quicktest-native-android-x86-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-android-x86/5.15.15/jar) + * [**qtjambi-quicktest-native-android-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-android-x64/5.15.15/jar) + * [**qtjambi-quicktest-native-android-arm-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-android-arm/5.15.15/jar) + * [**qtjambi-quicktest-native-android-arm64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-android-arm64/5.15.15/jar) * [QtSql](https://doc.qt.io/qt-5/qtsql-index.html) in module **qtjambi-sql**: - * [**qtjambi-sql-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql/5.15.14/jar) - * [**qtjambi-sql-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-windows-x64/5.15.14/jar) - * [**qtjambi-sql-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-linux-x64/5.15.14/jar) - * [**qtjambi-sql-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-macos/5.15.14/jar) - * [**qtjambi-sql-native-android-x86-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-android-x86/5.15.14/jar) - * [**qtjambi-sql-native-android-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-android-x64/5.15.14/jar) - * [**qtjambi-sql-native-android-arm-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-android-arm/5.15.14/jar) - * [**qtjambi-sql-native-android-arm64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-android-arm64/5.15.14/jar) + * [**qtjambi-sql-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql/5.15.15/jar) + * [**qtjambi-sql-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-windows-x64/5.15.15/jar) + * [**qtjambi-sql-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-linux-x64/5.15.15/jar) + * [**qtjambi-sql-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-macos/5.15.15/jar) + * [**qtjambi-sql-native-android-x86-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-android-x86/5.15.15/jar) + * [**qtjambi-sql-native-android-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-android-x64/5.15.15/jar) + * [**qtjambi-sql-native-android-arm-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-android-arm/5.15.15/jar) + * [**qtjambi-sql-native-android-arm64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-android-arm64/5.15.15/jar) * [QtTest](https://doc.qt.io/qt-5/qttest-index.html) in module **qtjambi-test**: - * [**qtjambi-test-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test/5.15.14/jar) - * [**qtjambi-test-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-windows-x64/5.15.14/jar) - * [**qtjambi-test-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-linux-x64/5.15.14/jar) - * [**qtjambi-test-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-macos/5.15.14/jar) - * [**qtjambi-test-native-android-x86-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-android-x86/5.15.14/jar) - * [**qtjambi-test-native-android-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-android-x64/5.15.14/jar) - * [**qtjambi-test-native-android-arm-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-android-arm/5.15.14/jar) - * [**qtjambi-test-native-android-arm64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-android-arm64/5.15.14/jar) + * [**qtjambi-test-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test/5.15.15/jar) + * [**qtjambi-test-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-windows-x64/5.15.15/jar) + * [**qtjambi-test-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-linux-x64/5.15.15/jar) + * [**qtjambi-test-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-macos/5.15.15/jar) + * [**qtjambi-test-native-android-x86-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-android-x86/5.15.15/jar) + * [**qtjambi-test-native-android-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-android-x64/5.15.15/jar) + * [**qtjambi-test-native-android-arm-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-android-arm/5.15.15/jar) + * [**qtjambi-test-native-android-arm64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-android-arm64/5.15.15/jar) ### Qt5 Add-Ons * [QtBluetooth](https://doc.qt.io/qt-5/qtbluetooth-index.html) in module **qtjambi-bluetooth**: - * [**qtjambi-bluetooth-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth/5.15.14/jar) - * [**qtjambi-bluetooth-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-windows-x64/5.15.14/jar) - * [**qtjambi-bluetooth-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-linux-x64/5.15.14/jar) - * [**qtjambi-bluetooth-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-macos/5.15.14/jar) - * [**qtjambi-bluetooth-native-android-x86-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-android-x86/5.15.14/jar) - * [**qtjambi-bluetooth-native-android-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-android-x64/5.15.14/jar) - * [**qtjambi-bluetooth-native-android-arm-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-android-arm/5.15.14/jar) - * [**qtjambi-bluetooth-native-android-arm64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-android-arm64/5.15.14/jar) + * [**qtjambi-bluetooth-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth/5.15.15/jar) + * [**qtjambi-bluetooth-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-windows-x64/5.15.15/jar) + * [**qtjambi-bluetooth-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-linux-x64/5.15.15/jar) + * [**qtjambi-bluetooth-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-macos/5.15.15/jar) + * [**qtjambi-bluetooth-native-android-x86-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-android-x86/5.15.15/jar) + * [**qtjambi-bluetooth-native-android-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-android-x64/5.15.15/jar) + * [**qtjambi-bluetooth-native-android-arm-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-android-arm/5.15.15/jar) + * [**qtjambi-bluetooth-native-android-arm64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-android-arm64/5.15.15/jar) * [QtConcurrent](https://doc.qt.io/qt-5/qtconcurrent-index.html) in module **qtjambi-concurrent**: - * [**qtjambi-concurrent-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent/5.15.14/jar) - * [**qtjambi-concurrent-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-windows-x64/5.15.14/jar) - * [**qtjambi-concurrent-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-linux-x64/5.15.14/jar) - * [**qtjambi-concurrent-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-macos/5.15.14/jar) - * [**qtjambi-concurrent-native-android-x86-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-android-x86/5.15.14/jar) - * [**qtjambi-concurrent-native-android-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-android-x64/5.15.14/jar) - * [**qtjambi-concurrent-native-android-arm-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-android-arm/5.15.14/jar) - * [**qtjambi-concurrent-native-android-arm64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-android-arm64/5.15.14/jar) + * [**qtjambi-concurrent-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent/5.15.15/jar) + * [**qtjambi-concurrent-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-windows-x64/5.15.15/jar) + * [**qtjambi-concurrent-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-linux-x64/5.15.15/jar) + * [**qtjambi-concurrent-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-macos/5.15.15/jar) + * [**qtjambi-concurrent-native-android-x86-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-android-x86/5.15.15/jar) + * [**qtjambi-concurrent-native-android-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-android-x64/5.15.15/jar) + * [**qtjambi-concurrent-native-android-arm-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-android-arm/5.15.15/jar) + * [**qtjambi-concurrent-native-android-arm64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-android-arm64/5.15.15/jar) * [QtDBus](https://doc.qt.io/qt-5/qtdbus-index.html) in module **qtjambi-dbus**: - * [**qtjambi-dbus-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus/5.15.14/jar) - * [**qtjambi-dbus-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-windows-x64/5.15.14/jar) - * [**qtjambi-dbus-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-linux-x64/5.15.14/jar) - * [**qtjambi-dbus-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-macos/5.15.14/jar) + * [**qtjambi-dbus-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus/5.15.15/jar) + * [**qtjambi-dbus-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-windows-x64/5.15.15/jar) + * [**qtjambi-dbus-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-linux-x64/5.15.15/jar) + * [**qtjambi-dbus-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-macos/5.15.15/jar) * [QtGamepad](https://doc.qt.io/qt-5/qtgamepad-index.html) in module **qtjambi-gamepad**: - * [**qtjambi-gamepad-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-gamepad/5.15.14/jar) - * [**qtjambi-gamepad-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-gamepad-native-windows-x64/5.15.14/jar) - * [**qtjambi-gamepad-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-gamepad-native-linux-x64/5.15.14/jar) - * [**qtjambi-gamepad-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-gamepad-native-macos/5.15.14/jar) - * [**qtjambi-gamepad-native-android-x86-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-gamepad-native-android-x86/5.15.14/jar) - * [**qtjambi-gamepad-native-android-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-gamepad-native-android-x64/5.15.14/jar) - * [**qtjambi-gamepad-native-android-arm-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-gamepad-native-android-arm/5.15.14/jar) - * [**qtjambi-gamepad-native-android-arm64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-gamepad-native-android-arm64/5.15.14/jar) + * [**qtjambi-gamepad-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-gamepad/5.15.15/jar) + * [**qtjambi-gamepad-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-gamepad-native-windows-x64/5.15.15/jar) + * [**qtjambi-gamepad-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-gamepad-native-linux-x64/5.15.15/jar) + * [**qtjambi-gamepad-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-gamepad-native-macos/5.15.15/jar) + * [**qtjambi-gamepad-native-android-x86-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-gamepad-native-android-x86/5.15.15/jar) + * [**qtjambi-gamepad-native-android-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-gamepad-native-android-x64/5.15.15/jar) + * [**qtjambi-gamepad-native-android-arm-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-gamepad-native-android-arm/5.15.15/jar) + * [**qtjambi-gamepad-native-android-arm64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-gamepad-native-android-arm64/5.15.15/jar) * [QtHelp](https://doc.qt.io/qt-5/qthelp-index.html) in module **qtjambi-help**: - * [**qtjambi-help-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help/5.15.14/jar) - * [**qtjambi-help-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-windows-x64/5.15.14/jar) - * [**qtjambi-help-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-linux-x64/5.15.14/jar) - * [**qtjambi-help-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-macos/5.15.14/jar) - * [**qtjambi-help-native-android-x86-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-android-x86/5.15.14/jar) - * [**qtjambi-help-native-android-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-android-x64/5.15.14/jar) - * [**qtjambi-help-native-android-arm-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-android-arm/5.15.14/jar) - * [**qtjambi-help-native-android-arm64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-android-arm64/5.15.14/jar) + * [**qtjambi-help-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help/5.15.15/jar) + * [**qtjambi-help-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-windows-x64/5.15.15/jar) + * [**qtjambi-help-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-linux-x64/5.15.15/jar) + * [**qtjambi-help-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-macos/5.15.15/jar) + * [**qtjambi-help-native-android-x86-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-android-x86/5.15.15/jar) + * [**qtjambi-help-native-android-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-android-x64/5.15.15/jar) + * [**qtjambi-help-native-android-arm-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-android-arm/5.15.15/jar) + * [**qtjambi-help-native-android-arm64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-android-arm64/5.15.15/jar) * [QtLocation](https://doc.qt.io/qt-5/qtlocation-index.html) in module **qtjambi-location**: - * [**qtjambi-location-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-location/5.15.14/jar) - * [**qtjambi-location-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-location-native-windows-x64/5.15.14/jar) - * [**qtjambi-location-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-location-native-linux-x64/5.15.14/jar) - * [**qtjambi-location-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-location-native-macos/5.15.14/jar) - * [**qtjambi-location-native-android-x86-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-location-native-android-x86/5.15.14/jar) - * [**qtjambi-location-native-android-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-location-native-android-x64/5.15.14/jar) - * [**qtjambi-location-native-android-arm-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-location-native-android-arm/5.15.14/jar) - * [**qtjambi-location-native-android-arm64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-location-native-android-arm64/5.15.14/jar) + * [**qtjambi-location-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-location/5.15.15/jar) + * [**qtjambi-location-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-location-native-windows-x64/5.15.15/jar) + * [**qtjambi-location-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-location-native-linux-x64/5.15.15/jar) + * [**qtjambi-location-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-location-native-macos/5.15.15/jar) + * [**qtjambi-location-native-android-x86-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-location-native-android-x86/5.15.15/jar) + * [**qtjambi-location-native-android-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-location-native-android-x64/5.15.15/jar) + * [**qtjambi-location-native-android-arm-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-location-native-android-arm/5.15.15/jar) + * [**qtjambi-location-native-android-arm64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-location-native-android-arm64/5.15.15/jar) * [QtNfc](https://doc.qt.io/qt-5/qtnfc-index.html) in module **qtjambi-nfc**: - * [**qtjambi-nfc-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc/5.15.14/jar) - * [**qtjambi-nfc-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-windows-x64/5.15.14/jar) - * [**qtjambi-nfc-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-linux-x64/5.15.14/jar) - * [**qtjambi-nfc-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-macos/5.15.14/jar) - * [**qtjambi-nfc-native-android-x86-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-android-x86/5.15.14/jar) - * [**qtjambi-nfc-native-android-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-android-x64/5.15.14/jar) - * [**qtjambi-nfc-native-android-arm-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-android-arm/5.15.14/jar) - * [**qtjambi-nfc-native-android-arm64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-android-arm64/5.15.14/jar) + * [**qtjambi-nfc-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc/5.15.15/jar) + * [**qtjambi-nfc-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-windows-x64/5.15.15/jar) + * [**qtjambi-nfc-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-linux-x64/5.15.15/jar) + * [**qtjambi-nfc-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-macos/5.15.15/jar) + * [**qtjambi-nfc-native-android-x86-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-android-x86/5.15.15/jar) + * [**qtjambi-nfc-native-android-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-android-x64/5.15.15/jar) + * [**qtjambi-nfc-native-android-arm-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-android-arm/5.15.15/jar) + * [**qtjambi-nfc-native-android-arm64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-android-arm64/5.15.15/jar) * [QtPositioning](https://doc.qt.io/qt-5/qtpositioning-index.html) in module **qtjambi-positioning**: - * [**qtjambi-positioning-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning/5.15.14/jar) - * [**qtjambi-positioning-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-windows-x64/5.15.14/jar) - * [**qtjambi-positioning-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-linux-x64/5.15.14/jar) - * [**qtjambi-positioning-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-macos/5.15.14/jar) - * [**qtjambi-positioning-native-android-x86-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-android-x86/5.15.14/jar) - * [**qtjambi-positioning-native-android-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-android-x64/5.15.14/jar) - * [**qtjambi-positioning-native-android-arm-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-android-arm/5.15.14/jar) - * [**qtjambi-positioning-native-android-arm64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-android-arm64/5.15.14/jar) + * [**qtjambi-positioning-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning/5.15.15/jar) + * [**qtjambi-positioning-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-windows-x64/5.15.15/jar) + * [**qtjambi-positioning-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-linux-x64/5.15.15/jar) + * [**qtjambi-positioning-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-macos/5.15.15/jar) + * [**qtjambi-positioning-native-android-x86-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-android-x86/5.15.15/jar) + * [**qtjambi-positioning-native-android-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-android-x64/5.15.15/jar) + * [**qtjambi-positioning-native-android-arm-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-android-arm/5.15.15/jar) + * [**qtjambi-positioning-native-android-arm64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-android-arm64/5.15.15/jar) * [QtPrintSupport](https://doc.qt.io/qt-5/qtprintsupport-index.html) in module **qtjambi-printsupport**: - * [**qtjambi-printsupport-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport/5.15.14/jar) - * [**qtjambi-printsupport-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-windows-x64/5.15.14/jar) - * [**qtjambi-printsupport-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-linux-x64/5.15.14/jar) - * [**qtjambi-printsupport-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-macos/5.15.14/jar) - * [**qtjambi-printsupport-native-android-x86-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-android-x86/5.15.14/jar) - * [**qtjambi-printsupport-native-android-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-android-x64/5.15.14/jar) - * [**qtjambi-printsupport-native-android-arm-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-android-arm/5.15.14/jar) - * [**qtjambi-printsupport-native-android-arm64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-android-arm64/5.15.14/jar) + * [**qtjambi-printsupport-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport/5.15.15/jar) + * [**qtjambi-printsupport-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-windows-x64/5.15.15/jar) + * [**qtjambi-printsupport-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-linux-x64/5.15.15/jar) + * [**qtjambi-printsupport-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-macos/5.15.15/jar) + * [**qtjambi-printsupport-native-android-x86-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-android-x86/5.15.15/jar) + * [**qtjambi-printsupport-native-android-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-android-x64/5.15.15/jar) + * [**qtjambi-printsupport-native-android-arm-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-android-arm/5.15.15/jar) + * [**qtjambi-printsupport-native-android-arm64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-android-arm64/5.15.15/jar) * [QtPurchasing](https://doc.qt.io/qt-5/qtpurchasing-index.html) in module **qtjambi-purchasing**: - * [**qtjambi-purchasing-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-purchasing/5.15.14/jar) - * [**qtjambi-purchasing-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-purchasing-native-windows-x64/5.15.14/jar) - * [**qtjambi-purchasing-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-purchasing-native-linux-x64/5.15.14/jar) - * [**qtjambi-purchasing-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-purchasing-native-macos/5.15.14/jar) - * [**qtjambi-purchasing-native-android-x86-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-purchasing-native-android-x86/5.15.14/jar) - * [**qtjambi-purchasing-native-android-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-purchasing-native-android-x64/5.15.14/jar) - * [**qtjambi-purchasing-native-android-arm-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-purchasing-native-android-arm/5.15.14/jar) - * [**qtjambi-purchasing-native-android-arm64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-purchasing-native-android-arm64/5.15.14/jar) + * [**qtjambi-purchasing-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-purchasing/5.15.15/jar) + * [**qtjambi-purchasing-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-purchasing-native-windows-x64/5.15.15/jar) + * [**qtjambi-purchasing-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-purchasing-native-linux-x64/5.15.15/jar) + * [**qtjambi-purchasing-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-purchasing-native-macos/5.15.15/jar) + * [**qtjambi-purchasing-native-android-x86-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-purchasing-native-android-x86/5.15.15/jar) + * [**qtjambi-purchasing-native-android-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-purchasing-native-android-x64/5.15.15/jar) + * [**qtjambi-purchasing-native-android-arm-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-purchasing-native-android-arm/5.15.15/jar) + * [**qtjambi-purchasing-native-android-arm64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-purchasing-native-android-arm64/5.15.15/jar) * [QtQuickWidgets](https://doc.qt.io/qt-5/qtquickwidgets-module.html) in module **qtjambi-quickwidgets**: - * [**qtjambi-quickwidgets-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets/5.15.14/jar) - * [**qtjambi-quickwidgets-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-windows-x64/5.15.14/jar) - * [**qtjambi-quickwidgets-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-linux-x64/5.15.14/jar) - * [**qtjambi-quickwidgets-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-macos/5.15.14/jar) - * [**qtjambi-quickwidgets-native-android-x86-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-android-x86/5.15.14/jar) - * [**qtjambi-quickwidgets-native-android-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-android-x64/5.15.14/jar) - * [**qtjambi-quickwidgets-native-android-arm-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-android-arm/5.15.14/jar) - * [**qtjambi-quickwidgets-native-android-arm64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-android-arm64/5.15.14/jar) + * [**qtjambi-quickwidgets-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets/5.15.15/jar) + * [**qtjambi-quickwidgets-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-windows-x64/5.15.15/jar) + * [**qtjambi-quickwidgets-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-linux-x64/5.15.15/jar) + * [**qtjambi-quickwidgets-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-macos/5.15.15/jar) + * [**qtjambi-quickwidgets-native-android-x86-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-android-x86/5.15.15/jar) + * [**qtjambi-quickwidgets-native-android-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-android-x64/5.15.15/jar) + * [**qtjambi-quickwidgets-native-android-arm-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-android-arm/5.15.15/jar) + * [**qtjambi-quickwidgets-native-android-arm64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-android-arm64/5.15.15/jar) * [QtRemoteObjects](https://doc.qt.io/qt-5/qtremoteobjects-module.html) in module **qtjambi-remoteobjects**: - * [**qtjambi-remoteobjects-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects/5.15.14/jar) - * [**qtjambi-remoteobjects-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-windows-x64/5.15.14/jar) - * [**qtjambi-remoteobjects-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-linux-x64/5.15.14/jar) - * [**qtjambi-remoteobjects-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-macos/5.15.14/jar) - * [**qtjambi-remoteobjects-native-android-x86-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-android-x86/5.15.14/jar) - * [**qtjambi-remoteobjects-native-android-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-android-x64/5.15.14/jar) - * [**qtjambi-remoteobjects-native-android-arm-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-android-arm/5.15.14/jar) - * [**qtjambi-remoteobjects-native-android-arm64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-android-arm64/5.15.14/jar) + * [**qtjambi-remoteobjects-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects/5.15.15/jar) + * [**qtjambi-remoteobjects-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-windows-x64/5.15.15/jar) + * [**qtjambi-remoteobjects-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-linux-x64/5.15.15/jar) + * [**qtjambi-remoteobjects-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-macos/5.15.15/jar) + * [**qtjambi-remoteobjects-native-android-x86-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-android-x86/5.15.15/jar) + * [**qtjambi-remoteobjects-native-android-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-android-x64/5.15.15/jar) + * [**qtjambi-remoteobjects-native-android-arm-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-android-arm/5.15.15/jar) + * [**qtjambi-remoteobjects-native-android-arm64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-android-arm64/5.15.15/jar) * [QtScript](https://doc.qt.io/qt-5/qtscript-module.html) in module **qtjambi-script**: - * [**qtjambi-script-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-script/5.15.14/jar) - * [**qtjambi-script-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-script-native-windows-x64/5.15.14/jar) - * [**qtjambi-script-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-script-native-linux-x64/5.15.14/jar) - * [**qtjambi-script-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-script-native-macos/5.15.14/jar) - * [**qtjambi-script-native-android-x86-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-script-native-android-x86/5.15.14/jar) - * [**qtjambi-script-native-android-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-script-native-android-x64/5.15.14/jar) - * [**qtjambi-script-native-android-arm-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-script-native-android-arm/5.15.14/jar) - * [**qtjambi-script-native-android-arm64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-script-native-android-arm64/5.15.14/jar) + * [**qtjambi-script-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-script/5.15.15/jar) + * [**qtjambi-script-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-script-native-windows-x64/5.15.15/jar) + * [**qtjambi-script-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-script-native-linux-x64/5.15.15/jar) + * [**qtjambi-script-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-script-native-macos/5.15.15/jar) + * [**qtjambi-script-native-android-x86-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-script-native-android-x86/5.15.15/jar) + * [**qtjambi-script-native-android-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-script-native-android-x64/5.15.15/jar) + * [**qtjambi-script-native-android-arm-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-script-native-android-arm/5.15.15/jar) + * [**qtjambi-script-native-android-arm64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-script-native-android-arm64/5.15.15/jar) * [QtScriptTools](https://doc.qt.io/qt-5/qtscripttools-module.html) in module **qtjambi-scripttools**: - * [**qtjambi-scripttools-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scripttools/5.15.14/jar) - * [**qtjambi-scripttools-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scripttools-native-windows-x64/5.15.14/jar) - * [**qtjambi-scripttools-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scripttools-native-linux-x64/5.15.14/jar) - * [**qtjambi-scripttools-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scripttools-native-macos/5.15.14/jar) - * [**qtjambi-scripttools-native-android-x86-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scripttools-native-android-x86/5.15.14/jar) - * [**qtjambi-scripttools-native-android-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scripttools-native-android-x64/5.15.14/jar) - * [**qtjambi-scripttools-native-android-arm-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scripttools-native-android-arm/5.15.14/jar) - * [**qtjambi-scripttools-native-android-arm64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scripttools-native-android-arm64/5.15.14/jar) + * [**qtjambi-scripttools-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scripttools/5.15.15/jar) + * [**qtjambi-scripttools-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scripttools-native-windows-x64/5.15.15/jar) + * [**qtjambi-scripttools-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scripttools-native-linux-x64/5.15.15/jar) + * [**qtjambi-scripttools-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scripttools-native-macos/5.15.15/jar) + * [**qtjambi-scripttools-native-android-x86-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scripttools-native-android-x86/5.15.15/jar) + * [**qtjambi-scripttools-native-android-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scripttools-native-android-x64/5.15.15/jar) + * [**qtjambi-scripttools-native-android-arm-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scripttools-native-android-arm/5.15.15/jar) + * [**qtjambi-scripttools-native-android-arm64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scripttools-native-android-arm64/5.15.15/jar) * [QtSCXML](https://doc.qt.io/qt-5/qtscxml-index.html) in module **qtjambi-scxml**: - * [**qtjambi-scxml-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml/5.15.14/jar) - * [**qtjambi-scxml-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-windows-x64/5.15.14/jar) - * [**qtjambi-scxml-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-linux-x64/5.15.14/jar) - * [**qtjambi-scxml-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-macos/5.15.14/jar) - * [**qtjambi-scxml-native-android-x86-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-android-x86/5.15.14/jar) - * [**qtjambi-scxml-native-android-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-android-x64/5.15.14/jar) - * [**qtjambi-scxml-native-android-arm-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-android-arm/5.15.14/jar) - * [**qtjambi-scxml-native-android-arm64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-android-arm64/5.15.14/jar) + * [**qtjambi-scxml-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml/5.15.15/jar) + * [**qtjambi-scxml-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-windows-x64/5.15.15/jar) + * [**qtjambi-scxml-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-linux-x64/5.15.15/jar) + * [**qtjambi-scxml-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-macos/5.15.15/jar) + * [**qtjambi-scxml-native-android-x86-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-android-x86/5.15.15/jar) + * [**qtjambi-scxml-native-android-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-android-x64/5.15.15/jar) + * [**qtjambi-scxml-native-android-arm-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-android-arm/5.15.15/jar) + * [**qtjambi-scxml-native-android-arm64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-android-arm64/5.15.15/jar) * [QtSensors](https://doc.qt.io/qt-5/qtsensors-index.html) in module **qtjambi-sensors**: - * [**qtjambi-sensors-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors/5.15.14/jar) - * [**qtjambi-sensors-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-windows-x64/5.15.14/jar) - * [**qtjambi-sensors-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-linux-x64/5.15.14/jar) - * [**qtjambi-sensors-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-macos/5.15.14/jar) - * [**qtjambi-sensors-native-android-x86-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-android-x86/5.15.14/jar) - * [**qtjambi-sensors-native-android-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-android-x64/5.15.14/jar) - * [**qtjambi-sensors-native-android-arm-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-android-arm/5.15.14/jar) - * [**qtjambi-sensors-native-android-arm64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-android-arm64/5.15.14/jar) + * [**qtjambi-sensors-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors/5.15.15/jar) + * [**qtjambi-sensors-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-windows-x64/5.15.15/jar) + * [**qtjambi-sensors-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-linux-x64/5.15.15/jar) + * [**qtjambi-sensors-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-macos/5.15.15/jar) + * [**qtjambi-sensors-native-android-x86-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-android-x86/5.15.15/jar) + * [**qtjambi-sensors-native-android-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-android-x64/5.15.15/jar) + * [**qtjambi-sensors-native-android-arm-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-android-arm/5.15.15/jar) + * [**qtjambi-sensors-native-android-arm64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-android-arm64/5.15.15/jar) * [QtSerialBus](https://doc.qt.io/qt-5/qtserialbus-index.html) in module **qtjambi-serialbus**: - * [**qtjambi-serialbus-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus/5.15.14/jar) - * [**qtjambi-serialbus-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-windows-x64/5.15.14/jar) - * [**qtjambi-serialbus-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-linux-x64/5.15.14/jar) - * [**qtjambi-serialbus-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-macos/5.15.14/jar) - * [**qtjambi-serialbus-native-android-x86-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-android-x86/5.15.14/jar) - * [**qtjambi-serialbus-native-android-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-android-x64/5.15.14/jar) - * [**qtjambi-serialbus-native-android-arm-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-android-arm/5.15.14/jar) - * [**qtjambi-serialbus-native-android-arm64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-android-arm64/5.15.14/jar) + * [**qtjambi-serialbus-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus/5.15.15/jar) + * [**qtjambi-serialbus-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-windows-x64/5.15.15/jar) + * [**qtjambi-serialbus-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-linux-x64/5.15.15/jar) + * [**qtjambi-serialbus-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-macos/5.15.15/jar) + * [**qtjambi-serialbus-native-android-x86-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-android-x86/5.15.15/jar) + * [**qtjambi-serialbus-native-android-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-android-x64/5.15.15/jar) + * [**qtjambi-serialbus-native-android-arm-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-android-arm/5.15.15/jar) + * [**qtjambi-serialbus-native-android-arm64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-android-arm64/5.15.15/jar) * [QtSerialPort](https://doc.qt.io/qt-5/qtserialport-index.html) in module **qtjambi-serialport**: - * [**qtjambi-serialport-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport/5.15.14/jar) - * [**qtjambi-serialport-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-windows-x64/5.15.14/jar) - * [**qtjambi-serialport-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-linux-x64/5.15.14/jar) - * [**qtjambi-serialport-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-macos/5.15.14/jar) - * [**qtjambi-serialport-native-android-x86-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-android-x86/5.15.14/jar) - * [**qtjambi-serialport-native-android-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-android-x64/5.15.14/jar) - * [**qtjambi-serialport-native-android-arm-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-android-arm/5.15.14/jar) - * [**qtjambi-serialport-native-android-arm64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-android-arm64/5.15.14/jar) + * [**qtjambi-serialport-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport/5.15.15/jar) + * [**qtjambi-serialport-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-windows-x64/5.15.15/jar) + * [**qtjambi-serialport-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-linux-x64/5.15.15/jar) + * [**qtjambi-serialport-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-macos/5.15.15/jar) + * [**qtjambi-serialport-native-android-x86-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-android-x86/5.15.15/jar) + * [**qtjambi-serialport-native-android-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-android-x64/5.15.15/jar) + * [**qtjambi-serialport-native-android-arm-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-android-arm/5.15.15/jar) + * [**qtjambi-serialport-native-android-arm64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-android-arm64/5.15.15/jar) * [QtSvg](https://doc.qt.io/qt-5/qtsvg-index.html) in module **qtjambi-svg**: - * [**qtjambi-svg-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg/5.15.14/jar) - * [**qtjambi-svg-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-windows-x64/5.15.14/jar) - * [**qtjambi-svg-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-linux-x64/5.15.14/jar) - * [**qtjambi-svg-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-macos/5.15.14/jar) - * [**qtjambi-svg-native-android-x86-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-android-x86/5.15.14/jar) - * [**qtjambi-svg-native-android-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-android-x64/5.15.14/jar) - * [**qtjambi-svg-native-android-arm-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-android-arm/5.15.14/jar) - * [**qtjambi-svg-native-android-arm64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-android-arm64/5.15.14/jar) + * [**qtjambi-svg-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg/5.15.15/jar) + * [**qtjambi-svg-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-windows-x64/5.15.15/jar) + * [**qtjambi-svg-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-linux-x64/5.15.15/jar) + * [**qtjambi-svg-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-macos/5.15.15/jar) + * [**qtjambi-svg-native-android-x86-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-android-x86/5.15.15/jar) + * [**qtjambi-svg-native-android-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-android-x64/5.15.15/jar) + * [**qtjambi-svg-native-android-arm-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-android-arm/5.15.15/jar) + * [**qtjambi-svg-native-android-arm64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-android-arm64/5.15.15/jar) * [QtTextToSpeech](https://doc.qt.io/qt-5/qtspeech-index.html) in module **qtjambi-texttospeech**: - * [**qtjambi-texttospeech-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-texttospeech/5.15.14/jar) - * [**qtjambi-texttospeech-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-texttospeech-native-windows-x64/5.15.14/jar) - * [**qtjambi-texttospeech-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-texttospeech-native-linux-x64/5.15.14/jar) - * [**qtjambi-texttospeech-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-texttospeech-native-macos/5.15.14/jar) - * [**qtjambi-texttospeech-native-android-x86-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-texttospeech-native-android-x86/5.15.14/jar) - * [**qtjambi-texttospeech-native-android-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-texttospeech-native-android-x64/5.15.14/jar) - * [**qtjambi-texttospeech-native-android-arm-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-texttospeech-native-android-arm/5.15.14/jar) - * [**qtjambi-texttospeech-native-android-arm64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-texttospeech-native-android-arm64/5.15.14/jar) + * [**qtjambi-texttospeech-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-texttospeech/5.15.15/jar) + * [**qtjambi-texttospeech-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-texttospeech-native-windows-x64/5.15.15/jar) + * [**qtjambi-texttospeech-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-texttospeech-native-linux-x64/5.15.15/jar) + * [**qtjambi-texttospeech-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-texttospeech-native-macos/5.15.15/jar) + * [**qtjambi-texttospeech-native-android-x86-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-texttospeech-native-android-x86/5.15.15/jar) + * [**qtjambi-texttospeech-native-android-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-texttospeech-native-android-x64/5.15.15/jar) + * [**qtjambi-texttospeech-native-android-arm-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-texttospeech-native-android-arm/5.15.15/jar) + * [**qtjambi-texttospeech-native-android-arm64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-texttospeech-native-android-arm64/5.15.15/jar) * [QtUITools](https://doc.qt.io/qt-5/qtuitools-index.html) in module **qtjambi-uitools**: - * [**qtjambi-uitools-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools/5.15.14/jar) - * [**qtjambi-uitools-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-windows-x64/5.15.14/jar) - * [**qtjambi-uitools-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-linux-x64/5.15.14/jar) - * [**qtjambi-uitools-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-macos/5.15.14/jar) - * [**qtjambi-uitools-native-android-x86-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-android-x86/5.15.14/jar) - * [**qtjambi-uitools-native-android-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-android-x64/5.15.14/jar) - * [**qtjambi-uitools-native-android-arm-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-android-arm/5.15.14/jar) - * [**qtjambi-uitools-native-android-arm64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-android-arm64/5.15.14/jar) + * [**qtjambi-uitools-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools/5.15.15/jar) + * [**qtjambi-uitools-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-windows-x64/5.15.15/jar) + * [**qtjambi-uitools-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-linux-x64/5.15.15/jar) + * [**qtjambi-uitools-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-macos/5.15.15/jar) + * [**qtjambi-uitools-native-android-x86-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-android-x86/5.15.15/jar) + * [**qtjambi-uitools-native-android-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-android-x64/5.15.15/jar) + * [**qtjambi-uitools-native-android-arm-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-android-arm/5.15.15/jar) + * [**qtjambi-uitools-native-android-arm64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-android-arm64/5.15.15/jar) * [QtWebChannel](https://doc.qt.io/qt-5/qtwebchannel-index.html) in module **qtjambi-webchannel**: - * [**qtjambi-webchannel-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel/5.15.14/jar) - * [**qtjambi-webchannel-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-windows-x64/5.15.14/jar) - * [**qtjambi-webchannel-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-linux-x64/5.15.14/jar) - * [**qtjambi-webchannel-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-macos/5.15.14/jar) - * [**qtjambi-webchannel-native-android-x86-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-android-x86/5.15.14/jar) - * [**qtjambi-webchannel-native-android-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-android-x64/5.15.14/jar) - * [**qtjambi-webchannel-native-android-arm-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-android-arm/5.15.14/jar) - * [**qtjambi-webchannel-native-android-arm64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-android-arm64/5.15.14/jar) + * [**qtjambi-webchannel-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel/5.15.15/jar) + * [**qtjambi-webchannel-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-windows-x64/5.15.15/jar) + * [**qtjambi-webchannel-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-linux-x64/5.15.15/jar) + * [**qtjambi-webchannel-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-macos/5.15.15/jar) + * [**qtjambi-webchannel-native-android-x86-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-android-x86/5.15.15/jar) + * [**qtjambi-webchannel-native-android-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-android-x64/5.15.15/jar) + * [**qtjambi-webchannel-native-android-arm-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-android-arm/5.15.15/jar) + * [**qtjambi-webchannel-native-android-arm64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-android-arm64/5.15.15/jar) * [QtWebEngineCore](https://doc.qt.io/qt-5/qtwebengine-index.html) in module **qtjambi-webenginecore**: - * [**qtjambi-webenginecore-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginecore/5.15.14/jar) - * [**qtjambi-webenginecore-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginecore-native-windows-x64/5.15.14/jar) - * [**qtjambi-webenginecore-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginecore-native-linux-x64/5.15.14/jar) - * [**qtjambi-webenginecore-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginecore-native-macos/5.15.14/jar) + * [**qtjambi-webenginecore-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginecore/5.15.15/jar) + * [**qtjambi-webenginecore-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginecore-native-windows-x64/5.15.15/jar) + * [**qtjambi-webenginecore-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginecore-native-linux-x64/5.15.15/jar) + * [**qtjambi-webenginecore-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginecore-native-macos/5.15.15/jar) * [QtWebEngineWidgets](https://doc.qt.io/qt-5/qtwebengine-index.html) in module **qtjambi-webenginewidgets**: - * [**qtjambi-webenginewidgets-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginewidgets/5.15.14/jar) - * [**qtjambi-webenginewidgets-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginewidgets-native-windows-x64/5.15.14/jar) - * [**qtjambi-webenginewidgets-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginewidgets-native-linux-x64/5.15.14/jar) - * [**qtjambi-webenginewidgets-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginewidgets-native-macos/5.15.14/jar) + * [**qtjambi-webenginewidgets-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginewidgets/5.15.15/jar) + * [**qtjambi-webenginewidgets-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginewidgets-native-windows-x64/5.15.15/jar) + * [**qtjambi-webenginewidgets-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginewidgets-native-linux-x64/5.15.15/jar) + * [**qtjambi-webenginewidgets-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginewidgets-native-macos/5.15.15/jar) * [QtWebEngine](https://doc.qt.io/qt-5/qtwebengine-index.html) in module **qtjambi-webengine**: - * [**qtjambi-webengine-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webengine/5.15.14/jar) - * [**qtjambi-webengine-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webengine-native-windows-x64/5.15.14/jar) - * [**qtjambi-webengine-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webengine-native-linux-x64/5.15.14/jar) - * [**qtjambi-webengine-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webengine-native-macos/5.15.14/jar) + * [**qtjambi-webengine-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webengine/5.15.15/jar) + * [**qtjambi-webengine-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webengine-native-windows-x64/5.15.15/jar) + * [**qtjambi-webengine-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webengine-native-linux-x64/5.15.15/jar) + * [**qtjambi-webengine-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webengine-native-macos/5.15.15/jar) * [QtWebSockets](https://doc.qt.io/qt-5/qtwebsockets-index.html) in module **qtjambi-websockets**: - * [**qtjambi-websockets-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets/5.15.14/jar) - * [**qtjambi-websockets-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-windows-x64/5.15.14/jar) - * [**qtjambi-websockets-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-linux-x64/5.15.14/jar) - * [**qtjambi-websockets-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-macos/5.15.14/jar) - * [**qtjambi-websockets-native-android-x86-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-android-x86/5.15.14/jar) - * [**qtjambi-websockets-native-android-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-android-x64/5.15.14/jar) - * [**qtjambi-websockets-native-android-arm-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-android-arm/5.15.14/jar) - * [**qtjambi-websockets-native-android-arm64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-android-arm64/5.15.14/jar) + * [**qtjambi-websockets-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets/5.15.15/jar) + * [**qtjambi-websockets-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-windows-x64/5.15.15/jar) + * [**qtjambi-websockets-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-linux-x64/5.15.15/jar) + * [**qtjambi-websockets-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-macos/5.15.15/jar) + * [**qtjambi-websockets-native-android-x86-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-android-x86/5.15.15/jar) + * [**qtjambi-websockets-native-android-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-android-x64/5.15.15/jar) + * [**qtjambi-websockets-native-android-arm-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-android-arm/5.15.15/jar) + * [**qtjambi-websockets-native-android-arm64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-android-arm64/5.15.15/jar) * [QtWebView](https://doc.qt.io/qt-5/qtwebview-index.html) in module **qtjambi-webview**: - * [**qtjambi-webview-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview/5.15.14/jar) - * [**qtjambi-webview-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-windows-x64/5.15.14/jar) - * [**qtjambi-webview-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-linux-x64/5.15.14/jar) - * [**qtjambi-webview-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-macos/5.15.14/jar) - * [**qtjambi-webview-native-android-x86-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-android-x86/5.15.14/jar) - * [**qtjambi-webview-native-android-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-android-x64/5.15.14/jar) - * [**qtjambi-webview-native-android-arm-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-android-arm/5.15.14/jar) - * [**qtjambi-webview-native-android-arm64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-android-arm64/5.15.14/jar) + * [**qtjambi-webview-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview/5.15.15/jar) + * [**qtjambi-webview-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-windows-x64/5.15.15/jar) + * [**qtjambi-webview-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-linux-x64/5.15.15/jar) + * [**qtjambi-webview-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-macos/5.15.15/jar) + * [**qtjambi-webview-native-android-x86-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-android-x86/5.15.15/jar) + * [**qtjambi-webview-native-android-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-android-x64/5.15.15/jar) + * [**qtjambi-webview-native-android-arm-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-android-arm/5.15.15/jar) + * [**qtjambi-webview-native-android-arm64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-android-arm64/5.15.15/jar) * [QtXml](https://doc.qt.io/qt-5/qtxml-index.html) in module **qtjambi-xml**: - * [**qtjambi-xml-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml/5.15.14/jar) - * [**qtjambi-xml-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-windows-x64/5.15.14/jar) - * [**qtjambi-xml-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-linux-x64/5.15.14/jar) - * [**qtjambi-xml-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-macos/5.15.14/jar) - * [**qtjambi-xml-native-android-x86-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-android-x86/5.15.14/jar) - * [**qtjambi-xml-native-android-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-android-x64/5.15.14/jar) - * [**qtjambi-xml-native-android-arm-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-android-arm/5.15.14/jar) - * [**qtjambi-xml-native-android-arm64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-android-arm64/5.15.14/jar) + * [**qtjambi-xml-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml/5.15.15/jar) + * [**qtjambi-xml-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-windows-x64/5.15.15/jar) + * [**qtjambi-xml-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-linux-x64/5.15.15/jar) + * [**qtjambi-xml-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-macos/5.15.15/jar) + * [**qtjambi-xml-native-android-x86-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-android-x86/5.15.15/jar) + * [**qtjambi-xml-native-android-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-android-x64/5.15.15/jar) + * [**qtjambi-xml-native-android-arm-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-android-arm/5.15.15/jar) + * [**qtjambi-xml-native-android-arm64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-android-arm64/5.15.15/jar) * [QtXmlPatterns](https://doc.qt.io/qt-5/qtxmlpatterns-index.html) in module **qtjambi-xmlpatterns**: - * [**qtjambi-xmlpatterns-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xmlpatterns/5.15.14/jar) - * [**qtjambi-xmlpatterns-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xmlpatterns-native-windows-x64/5.15.14/jar) - * [**qtjambi-xmlpatterns-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xmlpatterns-native-linux-x64/5.15.14/jar) - * [**qtjambi-xmlpatterns-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xmlpatterns-native-macos/5.15.14/jar) - * [**qtjambi-xmlpatterns-native-android-x86-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xmlpatterns-native-android-x86/5.15.14/jar) - * [**qtjambi-xmlpatterns-native-android-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xmlpatterns-native-android-x64/5.15.14/jar) - * [**qtjambi-xmlpatterns-native-android-arm-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xmlpatterns-native-android-arm/5.15.14/jar) - * [**qtjambi-xmlpatterns-native-android-arm64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xmlpatterns-native-android-arm64/5.15.14/jar) + * [**qtjambi-xmlpatterns-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xmlpatterns/5.15.15/jar) + * [**qtjambi-xmlpatterns-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xmlpatterns-native-windows-x64/5.15.15/jar) + * [**qtjambi-xmlpatterns-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xmlpatterns-native-linux-x64/5.15.15/jar) + * [**qtjambi-xmlpatterns-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xmlpatterns-native-macos/5.15.15/jar) + * [**qtjambi-xmlpatterns-native-android-x86-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xmlpatterns-native-android-x86/5.15.15/jar) + * [**qtjambi-xmlpatterns-native-android-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xmlpatterns-native-android-x64/5.15.15/jar) + * [**qtjambi-xmlpatterns-native-android-arm-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xmlpatterns-native-android-arm/5.15.15/jar) + * [**qtjambi-xmlpatterns-native-android-arm64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xmlpatterns-native-android-arm64/5.15.15/jar) * [QtCharts](https://doc.qt.io/qt-5/qtcharts-index.html) in module **qtjambi-charts**: - * [**qtjambi-charts-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts/5.15.14/jar) - * [**qtjambi-charts-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-windows-x64/5.15.14/jar) - * [**qtjambi-charts-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-linux-x64/5.15.14/jar) - * [**qtjambi-charts-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-macos/5.15.14/jar) - * [**qtjambi-charts-native-android-x86-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-android-x86/5.15.14/jar) - * [**qtjambi-charts-native-android-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-android-x64/5.15.14/jar) - * [**qtjambi-charts-native-android-arm-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-android-arm/5.15.14/jar) - * [**qtjambi-charts-native-android-arm64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-android-arm64/5.15.14/jar) + * [**qtjambi-charts-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts/5.15.15/jar) + * [**qtjambi-charts-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-windows-x64/5.15.15/jar) + * [**qtjambi-charts-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-linux-x64/5.15.15/jar) + * [**qtjambi-charts-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-macos/5.15.15/jar) + * [**qtjambi-charts-native-android-x86-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-android-x86/5.15.15/jar) + * [**qtjambi-charts-native-android-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-android-x64/5.15.15/jar) + * [**qtjambi-charts-native-android-arm-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-android-arm/5.15.15/jar) + * [**qtjambi-charts-native-android-arm64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-android-arm64/5.15.15/jar) * [QtDataVisualization](https://doc.qt.io/qt-5/qtdatavisualization-index.html) in module **qtjambi-datavisualization**: - * [**qtjambi-datavisualization-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization/5.15.14/jar) - * [**qtjambi-datavisualization-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-windows-x64/5.15.14/jar) - * [**qtjambi-datavisualization-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-linux-x64/5.15.14/jar) - * [**qtjambi-datavisualization-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-macos/5.15.14/jar) - * [**qtjambi-datavisualization-native-android-x86-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-android-x86/5.15.14/jar) - * [**qtjambi-datavisualization-native-android-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-android-x64/5.15.14/jar) - * [**qtjambi-datavisualization-native-android-arm-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-android-arm/5.15.14/jar) - * [**qtjambi-datavisualization-native-android-arm64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-android-arm64/5.15.14/jar) + * [**qtjambi-datavisualization-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization/5.15.15/jar) + * [**qtjambi-datavisualization-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-windows-x64/5.15.15/jar) + * [**qtjambi-datavisualization-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-linux-x64/5.15.15/jar) + * [**qtjambi-datavisualization-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-macos/5.15.15/jar) + * [**qtjambi-datavisualization-native-android-x86-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-android-x86/5.15.15/jar) + * [**qtjambi-datavisualization-native-android-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-android-x64/5.15.15/jar) + * [**qtjambi-datavisualization-native-android-arm-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-android-arm/5.15.15/jar) + * [**qtjambi-datavisualization-native-android-arm64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-android-arm64/5.15.15/jar) * [QtNetworkAuth](https://doc.qt.io/qt-5/qtnetworkauth-index.html) in module **qtjambi-networkauth**: - * [**qtjambi-networkauth-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth/5.15.14/jar) - * [**qtjambi-networkauth-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-windows-x64/5.15.14/jar) - * [**qtjambi-networkauth-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-linux-x64/5.15.14/jar) - * [**qtjambi-networkauth-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-macos/5.15.14/jar) - * [**qtjambi-networkauth-native-android-x86-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-android-x86/5.15.14/jar) - * [**qtjambi-networkauth-native-android-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-android-x64/5.15.14/jar) - * [**qtjambi-networkauth-native-android-arm-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-android-arm/5.15.14/jar) - * [**qtjambi-networkauth-native-android-arm64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-android-arm64/5.15.14/jar) + * [**qtjambi-networkauth-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth/5.15.15/jar) + * [**qtjambi-networkauth-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-windows-x64/5.15.15/jar) + * [**qtjambi-networkauth-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-linux-x64/5.15.15/jar) + * [**qtjambi-networkauth-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-macos/5.15.15/jar) + * [**qtjambi-networkauth-native-android-x86-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-android-x86/5.15.15/jar) + * [**qtjambi-networkauth-native-android-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-android-x64/5.15.15/jar) + * [**qtjambi-networkauth-native-android-arm-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-android-arm/5.15.15/jar) + * [**qtjambi-networkauth-native-android-arm64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-android-arm64/5.15.15/jar) * [QtVirtualKeyboard](https://doc.qt.io/qt-5/qtvirtualkeyboard-index.html) in module **qtjambi-virtualkeyboard**: - * [**qtjambi-virtualkeyboard-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard/5.15.14/jar) - * [**qtjambi-virtualkeyboard-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-windows-x64/5.15.14/jar) - * [**qtjambi-virtualkeyboard-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-linux-x64/5.15.14/jar) - * [**qtjambi-virtualkeyboard-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-macos/5.15.14/jar) - * [**qtjambi-virtualkeyboard-native-android-x86-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-android-x86/5.15.14/jar) - * [**qtjambi-virtualkeyboard-native-android-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-android-x64/5.15.14/jar) - * [**qtjambi-virtualkeyboard-native-android-arm-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-android-arm/5.15.14/jar) - * [**qtjambi-virtualkeyboard-native-android-arm64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-android-arm64/5.15.14/jar) + * [**qtjambi-virtualkeyboard-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard/5.15.15/jar) + * [**qtjambi-virtualkeyboard-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-windows-x64/5.15.15/jar) + * [**qtjambi-virtualkeyboard-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-linux-x64/5.15.15/jar) + * [**qtjambi-virtualkeyboard-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-macos/5.15.15/jar) + * [**qtjambi-virtualkeyboard-native-android-x86-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-android-x86/5.15.15/jar) + * [**qtjambi-virtualkeyboard-native-android-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-android-x64/5.15.15/jar) + * [**qtjambi-virtualkeyboard-native-android-arm-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-android-arm/5.15.15/jar) + * [**qtjambi-virtualkeyboard-native-android-arm64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-android-arm64/5.15.15/jar) * [QtQuick3D](https://doc.qt.io/qt-5/qtquick3d-index.html) in module **qtjambi-quick3d**: - * [**qtjambi-quick3d-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d/5.15.14/jar) - * [**qtjambi-quick3d-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-windows-x64/5.15.14/jar) - * [**qtjambi-quick3d-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-linux-x64/5.15.14/jar) - * [**qtjambi-quick3d-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-macos/5.15.14/jar) - * [**qtjambi-quick3d-native-android-x86-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-android-x86/5.15.14/jar) - * [**qtjambi-quick3d-native-android-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-android-x64/5.15.14/jar) - * [**qtjambi-quick3d-native-android-arm-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-android-arm/5.15.14/jar) - * [**qtjambi-quick3d-native-android-arm64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-android-arm64/5.15.14/jar) + * [**qtjambi-quick3d-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d/5.15.15/jar) + * [**qtjambi-quick3d-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-windows-x64/5.15.15/jar) + * [**qtjambi-quick3d-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-linux-x64/5.15.15/jar) + * [**qtjambi-quick3d-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-macos/5.15.15/jar) + * [**qtjambi-quick3d-native-android-x86-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-android-x86/5.15.15/jar) + * [**qtjambi-quick3d-native-android-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-android-x64/5.15.15/jar) + * [**qtjambi-quick3d-native-android-arm-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-android-arm/5.15.15/jar) + * [**qtjambi-quick3d-native-android-arm64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-android-arm64/5.15.15/jar) * [QtDesigner](https://doc.qt.io/qt-5/qtdesigner-manual.html) in module **qtjambi-designer**: - * [**qtjambi-designer-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer/5.15.14/jar) - * [**qtjambi-designer-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-windows-x64/5.15.14/jar) - * [**qtjambi-designer-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-linux-x64/5.15.14/jar) - * [**qtjambi-designer-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-macos/5.15.14/jar) - * [**qtjambi-designer-native-android-x86-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-android-x86/5.15.14/jar) - * [**qtjambi-designer-native-android-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-android-x64/5.15.14/jar) - * [**qtjambi-designer-native-android-arm-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-android-arm/5.15.14/jar) - * [**qtjambi-designer-native-android-arm64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-android-arm64/5.15.14/jar) + * [**qtjambi-designer-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer/5.15.15/jar) + * [**qtjambi-designer-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-windows-x64/5.15.15/jar) + * [**qtjambi-designer-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-linux-x64/5.15.15/jar) + * [**qtjambi-designer-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-macos/5.15.15/jar) + * [**qtjambi-designer-native-android-x86-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-android-x86/5.15.15/jar) + * [**qtjambi-designer-native-android-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-android-x64/5.15.15/jar) + * [**qtjambi-designer-native-android-arm-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-android-arm/5.15.15/jar) + * [**qtjambi-designer-native-android-arm64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-android-arm64/5.15.15/jar) ### Qt5 Platform-dependent Add-Ons * [Active Qt (Windows only)](https://doc.qt.io/qt-5/activeqt-manual.html) in module **qtjambi-activex**: - * [**qtjambi-activex-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-activex/5.15.14/jar) - * [**qtjambi-activex-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-activex-native-windows-x64/5.15.14/jar) + * [**qtjambi-activex-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-activex/5.15.15/jar) + * [**qtjambi-activex-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-activex-native-windows-x64/5.15.15/jar) * [QtWinExtras (Windows only)](https://doc.qt.io/qt-5/qtwinextras-index.html) in module **qtjambi-winextras**: - * [**qtjambi-winextras-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-winextras/5.15.14/jar) - * [**qtjambi-winextras-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-winextras-native-windows-x64/5.15.14/jar) + * [**qtjambi-winextras-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-winextras/5.15.15/jar) + * [**qtjambi-winextras-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-winextras-native-windows-x64/5.15.15/jar) * [QtMacExtras (macOS only)](https://doc.qt.io/qt-5/qtmacextras-index.html) in module **qtjambi-macextras**: - * [**qtjambi-macextras-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-macextras/5.15.14/jar) - * [**qtjambi-macextras-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-macextras-native-macos/5.15.14/jar) + * [**qtjambi-macextras-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-macextras/5.15.15/jar) + * [**qtjambi-macextras-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-macextras-native-macos/5.15.15/jar) * [QtX11Extras (Linux only)](https://doc.qt.io/qt-5/qtx11extras-index.html) in module **qtjambi-x11extras**: - * [**qtjambi-x11extras-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-x11extras/5.15.14/jar) - * [**qtjambi-x11extras-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-x11extras-native-linux-x64/5.15.14/jar) + * [**qtjambi-x11extras-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-x11extras/5.15.15/jar) + * [**qtjambi-x11extras-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-x11extras-native-linux-x64/5.15.15/jar) ### Qt3D * [Qt3DCore](https://doc.qt.io/qt-5/qt3d-index.html) in module **qtjambi-qt3dcore**: - * [**qtjambi-qt3dcore-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore/5.15.14/jar) - * [**qtjambi-qt3dcore-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-windows-x64/5.15.14/jar) - * [**qtjambi-qt3dcore-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-linux-x64/5.15.14/jar) - * [**qtjambi-qt3dcore-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-macos/5.15.14/jar) - * [**qtjambi-qt3dcore-native-android-x86-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-android-x86/5.15.14/jar) - * [**qtjambi-qt3dcore-native-android-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-android-x64/5.15.14/jar) - * [**qtjambi-qt3dcore-native-android-arm-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-android-arm/5.15.14/jar) - * [**qtjambi-qt3dcore-native-android-arm64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-android-arm64/5.15.14/jar) + * [**qtjambi-qt3dcore-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore/5.15.15/jar) + * [**qtjambi-qt3dcore-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-windows-x64/5.15.15/jar) + * [**qtjambi-qt3dcore-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-linux-x64/5.15.15/jar) + * [**qtjambi-qt3dcore-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-macos/5.15.15/jar) + * [**qtjambi-qt3dcore-native-android-x86-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-android-x86/5.15.15/jar) + * [**qtjambi-qt3dcore-native-android-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-android-x64/5.15.15/jar) + * [**qtjambi-qt3dcore-native-android-arm-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-android-arm/5.15.15/jar) + * [**qtjambi-qt3dcore-native-android-arm64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-android-arm64/5.15.15/jar) * [Qt3DRender](https://doc.qt.io/qt-5/qt3d-index.html) in module **qtjambi-qt3drender**: - * [**qtjambi-qt3drender-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender/5.15.14/jar) - * [**qtjambi-qt3drender-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-windows-x64/5.15.14/jar) - * [**qtjambi-qt3drender-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-linux-x64/5.15.14/jar) - * [**qtjambi-qt3drender-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-macos/5.15.14/jar) - * [**qtjambi-qt3drender-native-android-x86-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-android-x86/5.15.14/jar) - * [**qtjambi-qt3drender-native-android-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-android-x64/5.15.14/jar) - * [**qtjambi-qt3drender-native-android-arm-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-android-arm/5.15.14/jar) - * [**qtjambi-qt3drender-native-android-arm64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-android-arm64/5.15.14/jar) + * [**qtjambi-qt3drender-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender/5.15.15/jar) + * [**qtjambi-qt3drender-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-windows-x64/5.15.15/jar) + * [**qtjambi-qt3drender-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-linux-x64/5.15.15/jar) + * [**qtjambi-qt3drender-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-macos/5.15.15/jar) + * [**qtjambi-qt3drender-native-android-x86-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-android-x86/5.15.15/jar) + * [**qtjambi-qt3drender-native-android-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-android-x64/5.15.15/jar) + * [**qtjambi-qt3drender-native-android-arm-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-android-arm/5.15.15/jar) + * [**qtjambi-qt3drender-native-android-arm64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-android-arm64/5.15.15/jar) * [Qt3DAnimation](https://doc.qt.io/qt-5/qt3d-index.html) in module **qtjambi-qt3danimation**: - * [**qtjambi-qt3danimation-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation/5.15.14/jar) - * [**qtjambi-qt3danimation-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-windows-x64/5.15.14/jar) - * [**qtjambi-qt3danimation-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-linux-x64/5.15.14/jar) - * [**qtjambi-qt3danimation-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-macos/5.15.14/jar) - * [**qtjambi-qt3danimation-native-android-x86-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-android-x86/5.15.14/jar) - * [**qtjambi-qt3danimation-native-android-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-android-x64/5.15.14/jar) - * [**qtjambi-qt3danimation-native-android-arm-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-android-arm/5.15.14/jar) - * [**qtjambi-qt3danimation-native-android-arm64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-android-arm64/5.15.14/jar) + * [**qtjambi-qt3danimation-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation/5.15.15/jar) + * [**qtjambi-qt3danimation-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-windows-x64/5.15.15/jar) + * [**qtjambi-qt3danimation-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-linux-x64/5.15.15/jar) + * [**qtjambi-qt3danimation-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-macos/5.15.15/jar) + * [**qtjambi-qt3danimation-native-android-x86-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-android-x86/5.15.15/jar) + * [**qtjambi-qt3danimation-native-android-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-android-x64/5.15.15/jar) + * [**qtjambi-qt3danimation-native-android-arm-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-android-arm/5.15.15/jar) + * [**qtjambi-qt3danimation-native-android-arm64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-android-arm64/5.15.15/jar) * [Qt3DExtras](https://doc.qt.io/qt-5/qt3d-index.html) in module **qtjambi-qt3dextras**: - * [**qtjambi-qt3dextras-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras/5.15.14/jar) - * [**qtjambi-qt3dextras-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-windows-x64/5.15.14/jar) - * [**qtjambi-qt3dextras-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-linux-x64/5.15.14/jar) - * [**qtjambi-qt3dextras-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-macos/5.15.14/jar) - * [**qtjambi-qt3dextras-native-android-x86-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-android-x86/5.15.14/jar) - * [**qtjambi-qt3dextras-native-android-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-android-x64/5.15.14/jar) - * [**qtjambi-qt3dextras-native-android-arm-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-android-arm/5.15.14/jar) - * [**qtjambi-qt3dextras-native-android-arm64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-android-arm64/5.15.14/jar) + * [**qtjambi-qt3dextras-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras/5.15.15/jar) + * [**qtjambi-qt3dextras-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-windows-x64/5.15.15/jar) + * [**qtjambi-qt3dextras-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-linux-x64/5.15.15/jar) + * [**qtjambi-qt3dextras-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-macos/5.15.15/jar) + * [**qtjambi-qt3dextras-native-android-x86-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-android-x86/5.15.15/jar) + * [**qtjambi-qt3dextras-native-android-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-android-x64/5.15.15/jar) + * [**qtjambi-qt3dextras-native-android-arm-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-android-arm/5.15.15/jar) + * [**qtjambi-qt3dextras-native-android-arm64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-android-arm64/5.15.15/jar) * [Qt3DInput](https://doc.qt.io/qt-5/qt3d-index.html) in module **qtjambi-qt3dinput**: - * [**qtjambi-qt3dinput-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput/5.15.14/jar) - * [**qtjambi-qt3dinput-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-windows-x64/5.15.14/jar) - * [**qtjambi-qt3dinput-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-linux-x64/5.15.14/jar) - * [**qtjambi-qt3dinput-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-macos/5.15.14/jar) - * [**qtjambi-qt3dinput-native-android-x86-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-android-x86/5.15.14/jar) - * [**qtjambi-qt3dinput-native-android-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-android-x64/5.15.14/jar) - * [**qtjambi-qt3dinput-native-android-arm-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-android-arm/5.15.14/jar) - * [**qtjambi-qt3dinput-native-android-arm64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-android-arm64/5.15.14/jar) + * [**qtjambi-qt3dinput-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput/5.15.15/jar) + * [**qtjambi-qt3dinput-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-windows-x64/5.15.15/jar) + * [**qtjambi-qt3dinput-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-linux-x64/5.15.15/jar) + * [**qtjambi-qt3dinput-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-macos/5.15.15/jar) + * [**qtjambi-qt3dinput-native-android-x86-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-android-x86/5.15.15/jar) + * [**qtjambi-qt3dinput-native-android-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-android-x64/5.15.15/jar) + * [**qtjambi-qt3dinput-native-android-arm-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-android-arm/5.15.15/jar) + * [**qtjambi-qt3dinput-native-android-arm64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-android-arm64/5.15.15/jar) * [Qt3DLogic](https://doc.qt.io/qt-5/qt3d-index.html) in module **qtjambi-qt3dlogic**: - * [**qtjambi-qt3dlogic-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic/5.15.14/jar) - * [**qtjambi-qt3dlogic-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-windows-x64/5.15.14/jar) - * [**qtjambi-qt3dlogic-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-linux-x64/5.15.14/jar) - * [**qtjambi-qt3dlogic-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-macos/5.15.14/jar) - * [**qtjambi-qt3dlogic-native-android-x86-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-android-x86/5.15.14/jar) - * [**qtjambi-qt3dlogic-native-android-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-android-x64/5.15.14/jar) - * [**qtjambi-qt3dlogic-native-android-arm-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-android-arm/5.15.14/jar) - * [**qtjambi-qt3dlogic-native-android-arm64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-android-arm64/5.15.14/jar) + * [**qtjambi-qt3dlogic-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic/5.15.15/jar) + * [**qtjambi-qt3dlogic-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-windows-x64/5.15.15/jar) + * [**qtjambi-qt3dlogic-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-linux-x64/5.15.15/jar) + * [**qtjambi-qt3dlogic-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-macos/5.15.15/jar) + * [**qtjambi-qt3dlogic-native-android-x86-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-android-x86/5.15.15/jar) + * [**qtjambi-qt3dlogic-native-android-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-android-x64/5.15.15/jar) + * [**qtjambi-qt3dlogic-native-android-arm-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-android-arm/5.15.15/jar) + * [**qtjambi-qt3dlogic-native-android-arm64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-android-arm64/5.15.15/jar) * [Qt3DQuick](https://doc.qt.io/qt-5/qt3d-index.html) in module **qtjambi-qt3dquick**: - * [**qtjambi-qt3dquick-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick/5.15.14/jar) - * [**qtjambi-qt3dquick-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-windows-x64/5.15.14/jar) - * [**qtjambi-qt3dquick-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-linux-x64/5.15.14/jar) - * [**qtjambi-qt3dquick-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-macos/5.15.14/jar) - * [**qtjambi-qt3dquick-native-android-x86-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-android-x86/5.15.14/jar) - * [**qtjambi-qt3dquick-native-android-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-android-x64/5.15.14/jar) - * [**qtjambi-qt3dquick-native-android-arm-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-android-arm/5.15.14/jar) - * [**qtjambi-qt3dquick-native-android-arm64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-android-arm64/5.15.14/jar) + * [**qtjambi-qt3dquick-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick/5.15.15/jar) + * [**qtjambi-qt3dquick-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-windows-x64/5.15.15/jar) + * [**qtjambi-qt3dquick-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-linux-x64/5.15.15/jar) + * [**qtjambi-qt3dquick-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-macos/5.15.15/jar) + * [**qtjambi-qt3dquick-native-android-x86-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-android-x86/5.15.15/jar) + * [**qtjambi-qt3dquick-native-android-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-android-x64/5.15.15/jar) + * [**qtjambi-qt3dquick-native-android-arm-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-android-arm/5.15.15/jar) + * [**qtjambi-qt3dquick-native-android-arm64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-android-arm64/5.15.15/jar) * [Qt3DQuickExtras](https://doc.qt.io/qt-5/qt3d-index.html) in module **qtjambi-qt3dquickextras**: - * [**qtjambi-qt3dquickextras-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras/5.15.14/jar) - * [**qtjambi-qt3dquickextras-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-windows-x64/5.15.14/jar) - * [**qtjambi-qt3dquickextras-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-linux-x64/5.15.14/jar) - * [**qtjambi-qt3dquickextras-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-macos/5.15.14/jar) - * [**qtjambi-qt3dquickextras-native-android-x86-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-android-x86/5.15.14/jar) - * [**qtjambi-qt3dquickextras-native-android-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-android-x64/5.15.14/jar) - * [**qtjambi-qt3dquickextras-native-android-arm-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-android-arm/5.15.14/jar) - * [**qtjambi-qt3dquickextras-native-android-arm64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-android-arm64/5.15.14/jar) + * [**qtjambi-qt3dquickextras-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras/5.15.15/jar) + * [**qtjambi-qt3dquickextras-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-windows-x64/5.15.15/jar) + * [**qtjambi-qt3dquickextras-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-linux-x64/5.15.15/jar) + * [**qtjambi-qt3dquickextras-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-macos/5.15.15/jar) + * [**qtjambi-qt3dquickextras-native-android-x86-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-android-x86/5.15.15/jar) + * [**qtjambi-qt3dquickextras-native-android-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-android-x64/5.15.15/jar) + * [**qtjambi-qt3dquickextras-native-android-arm-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-android-arm/5.15.15/jar) + * [**qtjambi-qt3dquickextras-native-android-arm64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-android-arm64/5.15.15/jar) * [Qt3DQuickScene3D](https://doc.qt.io/qt-5/qt3d-index.html) in module **qtjambi-qt3dquickscene2d**: - * [**qtjambi-qt3dquickscene2d-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d/5.15.14/jar) - * [**qtjambi-qt3dquickscene2d-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-windows-x64/5.15.14/jar) - * [**qtjambi-qt3dquickscene2d-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-linux-x64/5.15.14/jar) - * [**qtjambi-qt3dquickscene2d-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-macos/5.15.14/jar) - * [**qtjambi-qt3dquickscene2d-native-android-x86-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-android-x86/5.15.14/jar) - * [**qtjambi-qt3dquickscene2d-native-android-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-android-x64/5.15.14/jar) - * [**qtjambi-qt3dquickscene2d-native-android-arm-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-android-arm/5.15.14/jar) - * [**qtjambi-qt3dquickscene2d-native-android-arm64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-android-arm64/5.15.14/jar) + * [**qtjambi-qt3dquickscene2d-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d/5.15.15/jar) + * [**qtjambi-qt3dquickscene2d-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-windows-x64/5.15.15/jar) + * [**qtjambi-qt3dquickscene2d-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-linux-x64/5.15.15/jar) + * [**qtjambi-qt3dquickscene2d-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-macos/5.15.15/jar) + * [**qtjambi-qt3dquickscene2d-native-android-x86-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-android-x86/5.15.15/jar) + * [**qtjambi-qt3dquickscene2d-native-android-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-android-x64/5.15.15/jar) + * [**qtjambi-qt3dquickscene2d-native-android-arm-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-android-arm/5.15.15/jar) + * [**qtjambi-qt3dquickscene2d-native-android-arm64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-android-arm64/5.15.15/jar) ### QtJambi Plugins * JDBC Sql Plugin: - * [**qtjambi-plugin-qsqljdbc-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-windows-x64/5.15.14/jar) - * [**qtjambi-plugin-qsqljdbc-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-linux-x64/5.15.14/jar) - * [**qtjambi-plugin-qsqljdbc-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-macos/5.15.14/jar) - * [**qtjambi-plugin-qsqljdbc-native-android-x86-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-x86/5.15.14/jar) - * [**qtjambi-plugin-qsqljdbc-native-android-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-x64/5.15.14/jar) - * [**qtjambi-plugin-qsqljdbc-native-android-arm-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-arm/5.15.14/jar) - * [**qtjambi-plugin-qsqljdbc-native-android-arm64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-arm64/5.15.14/jar) - * [**qtjambi-plugin-qsqljdbc-native-android-common-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-common/5.15.14/jar) + * [**qtjambi-plugin-qsqljdbc-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-windows-x64/5.15.15/jar) + * [**qtjambi-plugin-qsqljdbc-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-linux-x64/5.15.15/jar) + * [**qtjambi-plugin-qsqljdbc-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-macos/5.15.15/jar) + * [**qtjambi-plugin-qsqljdbc-native-android-x86-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-x86/5.15.15/jar) + * [**qtjambi-plugin-qsqljdbc-native-android-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-x64/5.15.15/jar) + * [**qtjambi-plugin-qsqljdbc-native-android-arm-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-arm/5.15.15/jar) + * [**qtjambi-plugin-qsqljdbc-native-android-arm64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-arm64/5.15.15/jar) + * [**qtjambi-plugin-qsqljdbc-native-android-common-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-common/5.15.15/jar) ### QtJambi Tools * [QtJambi User Interface Compiler (UIC)](https://doc.qt.io/qt-5/designer-using-a-ui-file.html#compile-time-form-processing): - * [**qtjambi-uic-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic/5.15.14/jar) - * [**qtjambi-uic-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-windows-x64/5.15.14/jar) - * [**qtjambi-uic-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-linux-x64/5.15.14/jar) - * [**qtjambi-uic-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-macos/5.15.14/jar) + * [**qtjambi-uic-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic/5.15.15/jar) + * [**qtjambi-uic-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-windows-x64/5.15.15/jar) + * [**qtjambi-uic-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-linux-x64/5.15.15/jar) + * [**qtjambi-uic-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-macos/5.15.15/jar) * QtJambi Deployer: - * [**qtjambi-deployer-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer/5.15.14/jar) - * [**qtjambi-deployer-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-windows-x64/5.15.14/jar) - * [**qtjambi-deployer-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-linux-x64/5.15.14/jar) - * [**qtjambi-deployer-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-macos/5.15.14/jar) - * [**qtjambi-deployer-native-android-x86-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-android-x86/5.15.14/jar) - * [**qtjambi-deployer-native-android-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-android-x64/5.15.14/jar) - * [**qtjambi-deployer-native-android-arm-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-android-arm/5.15.14/jar) - * [**qtjambi-deployer-native-android-arm64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-android-arm64/5.15.14/jar) + * [**qtjambi-deployer-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer/5.15.15/jar) + * [**qtjambi-deployer-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-windows-x64/5.15.15/jar) + * [**qtjambi-deployer-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-linux-x64/5.15.15/jar) + * [**qtjambi-deployer-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-macos/5.15.15/jar) + * [**qtjambi-deployer-native-android-x86-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-android-x86/5.15.15/jar) + * [**qtjambi-deployer-native-android-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-android-x64/5.15.15/jar) + * [**qtjambi-deployer-native-android-arm-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-android-arm/5.15.15/jar) + * [**qtjambi-deployer-native-android-arm64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-android-arm64/5.15.15/jar) * QtJambi Generator: - * [**qtjambi-generator-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-generator/5.15.14/jar) - * [**qtjambi-generator-native-windows-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-generator-native-windows-x64/5.15.14/jar) - * [**qtjambi-generator-native-linux-x64-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-generator-native-linux-x64/5.15.14/jar) - * [**qtjambi-generator-native-macos-5.15.14.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-generator-native-macos/5.15.14/jar) + * [**qtjambi-generator-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-generator/5.15.15/jar) + * [**qtjambi-generator-native-windows-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-generator-native-windows-x64/5.15.15/jar) + * [**qtjambi-generator-native-linux-x64-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-generator-native-linux-x64/5.15.15/jar) + * [**qtjambi-generator-native-macos-5.15.15.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-generator-native-macos/5.15.15/jar) diff --git a/www/Whats-New.md b/www/Whats-New.md index 82abd27d..163b43a4 100644 --- a/www/Whats-New.md +++ b/www/Whats-New.md @@ -1,13 +1,18 @@ -# What's new in QtJambi 6.5.0 +# What's new in QtJambi 6.5.1 ## Bugfixes Solved issues: -* [Issue 143](../../../issues/143): QObject.connect methods are non-static with 6.4.4 +* [Issue 148](../../../issues/148): QGuiApplication.overrideCursor() is crashing ## New Features -* `QJSEngine::CppOwnership` is now renamed to `JavaOwnership` to avoid missunderstanding. When working with Qml, QObjects are either managed by the Java programmer or by the Qml engine. -* Further improvements of QtJambi generator. - +Solved issues: +* [Issue 147](../../../issues/147): [uic] Add an option to *not* generate the "MyForm" container class +* [Issue 149](../../../issues/149): Improve QTJAMBI_DEBUG_TRACE feature +* [Issue 150](../../../issues/150): Use RTTI to identify dangling pointers +* [Issue 151](../../../issues/151): Make diagnostics features disabled by default +* [Issue 152](../../../issues/152): Configurable log levels +* [Issue 153](../../../issues/153): Make concurrent modification detection on Qt containers optional +* [Issue 158](../../../issues/158): Make QPlatformIntegration available