2010-05-03 63 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); 

應在以不同的方式解決同樣的問題。