我在Windows上运行了一些代码。当我在Android上使用Qt for Android
运行它时。似乎无法发出信号到达其他线程的插槽。我的代码如下:
m_pSqlThread = new SqlThread();
m_pSqlThread->moveToOtherThread();
connect(m_pSqlThread, SIGNAL(innerresult(QSqlQueryEx*)), this, SLOT(result(QSqlQueryEx*)));
connect(m_pSqlThread, SIGNAL(innererror(QSqlErrorEx,QSqlQueryEx*)), this, SLOT(error(QSqlErrorEx,QSqlQueryEx*)));
connect(this, SIGNAL(innerExec(QSqlQueryEx *)), m_pSqlThread, SLOT(exec(QSqlQueryEx *)));
connect(this, SIGNAL(threadInit()), m_pSqlThread, SLOT(init()));
emit threadInit();
SqlThread
类用于处理其他线程中的块函数,我使用
void SqlThread::moveToOtherThread()
{
moveToThread(ThreadSingleton::getInstance());//ThreadSingleton::getInstance() get a QThread *
}
将其移动到其他帖子中。现在我发出this->innerExec()
,它可以到达exec()
中的广告位m_pSqlThread
。
但当m_pSqlThread
在innnerresult()
中发出信号exec()
时,广告位this->result()
将无法运行。如果我将连接标记更改为Qt::DirectConnection
它有用,但我不想让你知道。
所以,我对于为什么代码在Windows上运行正确但在Android上非常感兴趣?为什么this
可以成功发出信号,但m_pSqlThread
可以“
我比较了两个编译器生成的moc文件,没有区别。并且所有连接都返回true。
P.S。我无法找到Qt for Android
代码...
我找到了原因:
如果您使用main()
之外的全局值作为接收器,则无法在Android mod中接收信号!!!!!!这似乎是一个BUG
谁能知道为什么?因为JNI?
我向Qt报告了一个错误,我会跟踪它。
答案 0 :(得分:0)
我在here
报告 他们说:您在QCoreApplication之前创建了一个基于QObject的对象。这不受支持。将对象的创建移动到main()函数中。
是的,当我发现导致问题的原因时,我就知道了。所以我改变我的代码以防止全局init退出main()函数。但是Windows和Android之间的不同行为也应该告诉开发人员IOS。