[英]How to convert QString to jstring?
根据 PaulMcKenzie 的回答,我尝试使用以下代码将 QString 转换为 jstring。
jstring CreateJStringFromQString(JNIEnv *env, const QString& str)
{
jstring js = env->NewString(reinterpret_cast<jchar *>(str.data()), str.size());
return js;
}
但是,我有以下错误
/home/runner/work/jni/jni/hello/src/main/cpp/HelloJNIImpl.cpp:46:69:
error: reinterpret_cast from type ‘const QChar*’ to type ‘jchar*’
{aka
‘short unsigned int*’} casts away qualifiers
46 | jstring js = env->NewString(reinterpret_cast<jchar *>
(str.data()), str.size());
^
FAILURE: Build failed with an exception.
我试过那个答案。 但它出现了上述错误。
如何将 QString 转换为 jstring ?
我不使用 Qt,所以我将参考这里关于 QString 的文档。
鉴于此,您可以尝试以下操作:
jstring CreateJStringFromQString(JNIEnv *env, const QString& str)
{
jclass string_class = env->FindClass("java/lang/String");
jmethodID string_constructor = env->GetMethodID(string_class, "<init>", "(Ljava/lang/String;)V" );
jstring js = env->NewObject(string_class, string_constructor, env->NewString(str.data(), str.size()));
return js;
}
我在自己编写的 JNI 接口中使用了与上面类似的代码。
没有错误检查来查看string_class
和string_constructor
是否有效,但假设它们是有效的。
基本上你必须构造一个 java String
对象,并用数据填充它。
从 Qt 6.1 开始,您可以使用QJniObject
如果您只需要临时jstring
例如将参数传递给 jni 函数调用,那么您可以使用这样的转换:
QJniObject::fromString(your_QString).object<jstring>()
但正如 Qt 文档中提到的,您需要注意字符串生存期绑定到拥有 QJniObject 的范围。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.