在QtScript(Qt 4.5.2)上连接到信号的功能不会触发

时间:2010-05-03 14:23:31

标签: qt signals-slots qtscript

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

我已经提出了一些理论,为什么会这样,我已经测试了我能想到的一切,但我已经碰到了一点墙。注意,我从来没有任何连接异常。以下是我目前的理论:

  • 我正在连接的信号已经连接到其他插槽,并且它以某种方式阻止它(但据我所知,所有Qt信号都会触发所有插槽而没有额外的工作,并且不能在此限制方式)
  • 信号拒绝我的连接,或在连接后断开连接(但我认为没有设施)
  • 我的连接是从另一个线程发生的,这在某种程度上导致它无法正常连接

这些理论中的任何一个都是合理的吗?如果没有,我错过了什么?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

这个问题已经很老了,已经回答了但是对于那些寻求帮助的人以及上述不是一个好解决方案的人,你可能想考虑设置 Qt :: ConnectionType 连接语句到 Qt :: DirectConnection ,如下所示:

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

哪个应该以不同的方式解决同样的问题。