繁体   English   中英

如何将 QString 转换为 jstring?

[英]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_classstring_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM