1

文字列パラメーターで QAndroidJniObject を使用して、Qt C++ クラスで Java 静的関数を呼び出そうとしています。

これは、私が呼び出している関数を持つ私のJavaクラスです

        public class StatusBar{

        public static void setStatusBarBackgroundColor(Activity activity,String colorPref) {

// My code


         }  
        }

この関数をC++から次のように呼び出しています

void ECApplicationInfo::changeStatusBarColor(QString color)
{
  QAndroidJniObject::callStaticMethod<void>( 
                  "com/ezeecube/ezeesync/StatusBar",
                  "setStatusBarBackgroundColor",
                  "(Landroid/app/Activity;)V",
                   activity,color);
}

次のエラーが表示されます

エラー: '...' activity,color) を介して自明にコピーできないタイプ 'class QString' のオブジェクトを渡すことはできません。

このエラーを取り除くにはどうすればよいですか

4

2 に答える 2

1

JNI は を認識しませんQString。JNI のjstring型に変換する必要があります。QAndroidJniObjectこれには便利な静的メソッドがあります。

QString q = "Hello world";
QAndroidJniObject jniObject = QAndroidJniObject::fromString(q);
jstring j = jniObject.object<jstring>();

これはごく一般的なことで、JNI ブリッジでは通常、タイプ間で手動によるシリアル化が必要です。

QAndroidJniObjectまた、Java 文字列から に変換するためのtoString() メソッドも提供しますQString

于 2015-03-14T04:37:33.117 に答える