2010-05-03 60 views
2

我已经注入了专有的Qt(4.5.2)应用程序,添加了我自己的QtScript兼容版本,并设法访问所有我需要的信号。但是,当连接到它们(通过QtScript)时,我的功能永远不会被调用。在QtScript(Qt 4.5.2)中连接到信号的函数没有被触发

我想出了几个理论,为什么会这样,我测试了所有我能想到的东西,但是我碰到了一堵墙。请注意,我从来没有任何连接异常。下面是我目前的理论:

  • 我连接到已经连接到其他插槽的信号,而这在某种程度上阻止它(但据我所知,所有Qt的信号火灾给所有插槽无需额外工作,不能以这种方式限制)
  • 信号拒绝我的连接,或断开连接后(但我没有看到这方面的设施)
  • 我的连接正在发生从另一个线程,这是某种方式导致它不能正确连接

是否其中任何一个e理论是否合理?如果不是,我错过了什么?

+2

第一个理论绝对是错误的。 Qt信号调用连接到它们的所有插槽。 – VestniK 2010-05-03 14:37:46

+0

信号是否可能不发射? – Lohrun 2010-05-03 15:29:54

+0

不,如果我阻止信号从命中对象,我知道他们连接到(我挂钩QObject ::连接,并从那里得到的对象包含我附加的信号)的相关事件不要发生。 – 2010-05-03 15:35:32

回答

3

经过大量的内部挖掘并提出了很多问题(这里和在Freenode上的#qt),我设法让它工作。问题是我注入的代码在没有事件泵的本地线程中运行。实例化QEventLoop并定期调用processEvents()解决了这个问题。

0

这个问题真的很老了,已经回答了,但对于那些来这里寻求帮助的人以及上述不是一个好的解决方案,你可能要考虑在连接语句中设置Qt :: ConnectionType的Qt :: DirectConnection像这样:

QObject::connect(scrollBar, SIGNAL(valueChanged(int)), 
       label, SLOT(setNum(int)), 
       Qt::DirectConnection); 

应在以不同的方式解决同样的问题。