2010-05-03 3 views
2

독점적 인 Qt (4.5.2) 응용 프로그램에 삽입하고, QtScript의 호환 가능한 빌드를 추가했으며, 모든 내가 필요한 신호. 그러나 QtScript를 통해 연결하면 내 함수가 호출되지 않습니다.QtScript (Qt 4.5.2)의 신호에 연결된 함수가 실행되지 않습니다.

왜 이런지에 대한 몇 가지 이론을 생각해 냈습니다. 내가 생각할 수있는 모든 것을 테스트했지만, 벽을 조금 칠했습니다. 참고, 나는 어떤 연결 예외도 전혀 가져 본 적이 없다. 여기에 내 현재의 이론은 다음과 같습니다 :

  • 신호가 이미 다른 슬롯에 연결되어 있고 그걸 어떻게 든 차단하고 있습니다. (그러나 내가 아는 한 모든 Qt 신호는 추가 작업없이 모든 슬롯에 발사됩니다. 이 제한을받을 수 없습니다.)
  • 신호가 연결을 거부하거나 연결 후 연결을 끊습니다. (하지만이 기능이 없습니다)
  • 다른 스레드에서 내 연결이 끊이지 않고 있는데, 이것은 어떻게 든됩니다 제대로 연결하지 못하게 함

그럴듯한 이론들? 그렇지 않다면 나는 무엇을 놓쳤는가?

+2

첫 번째 이론은 분명히 잘못되었습니다. Qt 신호는 그들에게 연결된 모든 슬롯을 호출합니다. – VestniK

+0

신호가 방출되지 않을 가능성이 있습니까? – Lohrun

+0

아니, 만약 내가 신호를 막을 경우 그들이 연결되어 있다는 것을 알 수있다. (나는 QObject :: connect를 연결하고 거기에서 거꾸로 작업하여 관련된 신호를 포함하는 객체를 얻는다.) 발생하지 않습니다. –

답변

3

내부를 둘러보고 많은 질문을 던지며 (여기와 #qt Freenode에서), 나는 그걸 작동시킬 수있었습니다. 문제는 내 주입 코드가 이벤트 펌프가없는 원시 스레드에서 실행된다는 것입니다. QEventLoop을 인스턴스화하고 일정한 간격으로 processEvents()를 호출하면이를 해결했습니다.

0

이 질문은 실제로 오래되었지만 이미 답변을 얻었지만 도움을 구하는 사람들과 위의 답변이 좋지 않은 사람을 위해 Qt :: ConnectionType을 connect 문에 설정하는 것이 좋습니다. 그래서 같은 Qt는 :: DirectConnection : 다른 방법으로 같은 문제를 해결해야

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

.

관련 문제