无法从Qt for Android中的其他线程接收信号

时间:2014-06-03 13:28:10

标签: android qt

我在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_pSqlThreadinnnerresult()中发出信号exec()时,广告位this->result()将无法运行。如果我将连接标记更改为Qt::DirectConnection它有用,但我不想让你知道。

所以,我对于为什么代码在Windows上运行正确但在Android上非常感兴趣?为什么this可以成功发出信号,但m_pSqlThread可以“

我比较了两个编译器生成的moc文件,没有区别。并且所有连接都返回true。

P.S。我无法找到Qt for Android代码...


我找到了原因: 如果您使用main()之外的全局值作为接收器,则无法在Android mod中接收信号!!!!!!这似乎是一个BUG

谁能知道为什么?因为JNI?


我向Qt报告了一个错误,我会跟踪它。

1 个答案:

答案 0 :(得分:0)

我在here

报告 他们说:

  

您在QCoreApplication之前创建了一个基于QObject的对象。这不受支持。将对象的创建移动到main()函数中。

是的,当我发现导致问题的原因时,我就知道了。所以我改变我的代码以防止全局init退出main()函数。但是Windows和Android之间的不同行为也应该告诉开发人员IOS。