Qt/C++でJavaからToast.makeTextメソッドを呼び出したいとします。コード: QT + = androidextrasを.proファイルに追加しました。Qt Android:JavaからToast.makeTextを呼び出す方法は?
Toast.java:
package com.classes.java;
public class Toast {
public static void makeText(String text, int duration) {
Toast.makeText(getApplicationContext(), text, duration).show();
}
}
toast.h:
#ifndef TOAST_H
#define TOAST_H
#include <QObject>
#include <QAndroidJniObject>
class Toast : public QObject
{
Q_OBJECT
public:
explicit Toast(QObject* parent = 0);
Q_INVOKABLE void make_text(QString& text, int duration);
signals:
public slots:
};
#endif // TOAST_H
toast.cpp:
#include "toast.h"
Toast::Toast(QObject* parent) : QObject(parent)
{
}
void Toast::make_text(QString& text, int duration)
{
QAndroidJniObject txt = QAndroidJniObject::fromString(text);
QAndroidJniObject::callStaticObjectMethod(
"com/classes/java/Toast",
"makeText",
"(Ljava/lang/String;I)V",
txt.object<jstring>(), duration);
}
main.cppに:は
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QtQml>
#include "toast.h"
int main(int argc, char* argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
qmlRegisterType<Toast>("java.class", 1, 0, "Toast");
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
return app.exec();
}
main.qml:
import QtQuick 2.6
import QtQuick.Window 2.2
import Qt.labs.controls 1.0
import java.class 1.0;
Window {
visible: true
Toast {
id: toast
}
Button {
id: button
text: "Click Me!"
onClicked: toast.make_text("Hello World!", 2000)
}
}
私は、このエラーメッセージが出ます:私はgetApplicationContext(のためのAndroidの文脈が必要だと思う
UserPath\build-QtMobileTest-Android_for_armeabi_v7a_GCC_4_9_Qt_5_6_0-Release\android-build\src\com\classes\java\Toast.java:9: error: cannot find symbol
Toast.makeText(getApplicationContext(), text, duration).show();
^
symbol: method getApplicationContext()
location: class Toast
Note: UserPath\build-QtMobileTest-Android_for_armeabi_v7a_GCC_4_9_Qt_5_6_0-Release\android-build\__qt5__android__files__\src\org\qtproject\qt5\android\bindings\QtActivity.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
1 error
:compileDebugJava FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':compileDebugJava'.
> Compilation failed; see the compiler error output for details.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED
を)が、私はどのように文脈を得ることができないのですか? Qt/C++ JNIを使用してToast.makeTextメソッドを呼び出すにはどうすればよいですか?ありがとう。
おかげで、私はこのコードを追加し、私はのAndroidManifest.xmlを追加しましたが、私は同じエラーを取得します。私はよくJavaを知らない。だから私はウェブページ上のコードを理解していない。手伝って頂けますか?私はしなければならない? –