2

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

我已经提出了一些理论来解释为什么会这样,并且我已经测试了我能想到的所有东西,但我遇到了一些障碍。请注意,我从来没有任何连接异常。以下是我目前的理论:

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

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

4

2 回答 2

3

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

于 2010-05-03T17:57:58.387 回答
0

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

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

这应该以不同的方式解决相同的问题。

于 2011-08-05T16:34:58.960 回答