对不起我的英语。
有一段代码在单独的线程(Java 代码)上运行在 android 上,如下所示:
public class ClientThread extends Thread
{
public void run()
{
MainActivity.nativeMethod(); // not working
}
}
public class MainActivity extends QtActivity
{
private static final String TAG = "MainActivity";
private static MainActivity _instance = null;
private static ClientThread _clientThread = null;
public MainActivity()
{
_instance = this;
}
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
nativeMethod(); // working
_clientThread = new ClientThread();
_clientThread.start();
}
public static native void nativeMethod();
}
为此有一个 C++ 桥接器:
class TestObject : public QObject
{
Q_OBJECT
public:
explicit TestObject(QObject *parent = 0);
static TestObject *getInstance();
Q_SIGNALS:
void nativeMethod();
public Q_SLOTS:
};
static void nativeMethod(JNIEnv *, jclass)
{
qDebug() << "works threaded or non-threaded calls But not below on threaded call.";
emit TestObject::getInstance()->nativeMethod();
}
也是一个 QML 连接:
import TestObjectPackage 1.0
Connections
{
target: TestObjectPackage.testObjectInstance
onNativeMethod:
{
console.log("QML received signal!");
}
}
jniNativeMethod 每次都会调用,但不会在单独的线程上发出发送信号到 QML。你能帮帮我吗?
最佳答案
Qt 可以通过不同的线程发送信号。它会记录哪个对象“属于”哪个线程,并相应地传递信号。
但是您需要确保接收线程实际处理传入的信号。这是通过在接收线程中安装 Qt 主循环或通过手动查询 Qt 队列来实现的。
关于java - 在单独的 Android 线程上调用时,emit 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23934896/