2013-05-15 1 views
3

포켓이 documentation 인 경우 슬롯에 반환 값을 지정할 수 있다고 나와 있지만 아직 어떻게 그렇게했는지 파악하지 못했습니다.PySide : 슬롯에서 값을 반환하는 중

나는 여기에 대한 사용 가능한 코드 샘플을 찾을 수 없습니다, 그래서 문서는 제안으로 나는 장식을 추가했습니다 :

def testSlot(self): 
    print('testSlot called') 
    return 'RETURN VALUE RETURN VALUE RETURN VALUE' 

을 그리고 나는이 같은 반환 값을 캡처하기 위해 노력하고있어 :

ret = foo.testSignal.emit() 

하지만 작동하지 않습니다. 내 테스트 코드는 here이며 crashesthis 오류 출력이 있습니다. 도움을 주시면 감사하겠습니다!

편집 : 내가 문제를 해결하는 데코레이터를 제거했지만 여전히 반환 할 값을 반환하지 않습니다.

나에게이주는대로 스크립트를 실행 :

foo.testSignal.emit()를
testSlot는 진정한

+0

데코레이터에는 두 개의'@'가 있습니다. – Blender

+0

어째서 저렇게되어 있는지 모르겠군요. 나는 그것을 고쳤다. 그러나 그것은 아직도 부서진다. – sorbet

+0

어떻게 충돌합니까? 전체 추적은 무엇입니까? – Blender

답변

1

난 당신이 불가능하다 생각 유감을했다. 신호와 슬롯이 느슨하게 결합되어 신호를 내보내도 슬롯을 직접 호출하지 않으므로 은 "해당"반환 값을 검색 할 수 없습니다.

이 생각해 보면이 명확 수 있습니다 :

당신은 다른 값을 반환 (예를 들어, 2 개의 다른 클래스) 2 개 개의 다른 슬롯, 에 하나 개의 신호를 연결할 수 있습니다. 두 개의 반환 값 중 할당하려고하는 변수에 도달해야하는 반환 값은 무엇입니까?

아마도 무엇을 의미합니까 this : 이것은 완전히 다른 무언가이며 MetaObject 시스템에서 "이름"으로 메서드를 "호출"하여 반환 값을 허용합니다.

+0

지연된 답변을 드려 죄송합니다. 본국에 없으며 인터넷에 접속할 수 없습니다. MetaObject 시스템에 대한 메소드를 "이름"으로 호출하는 것에 대해 자세히 설명 할 수 있습니까? 어떻게하면 리턴 값을 캡처 할 수 있습니까? – sorbet

+0

Qt의 메소드를 [QMetaObject :: invokeMethod] (http://qt-project.org/doc/qt-ko)를 사용하여 C++의 이름 (QString)으로 MetaObject 시스템을 통해 "호출"하거나 "호출"할 수 있습니다. 4.8/qmetaobject.html # invokeMethod) - 동적이며 사전 컴파일되지 않습니다. 예를 들어 C++ 메소드를 호출 할 때 필요합니다. QML - QML은 MetaObject 시스템에서 알려진 메서드 만 호출 할 수 있습니다. Q_INVOCABLE은 함수를 알려주는 데 필요합니다. PySide를 QML에 추가하면 Q_INVOCABLE이 없습니다. Slot을 선언하면 MetaObject 시스템에 자동으로 알려집니다. – nerdoc

+0

이것은 올바른 대답입니다. 신호를 내보내는 것은 기본적으로 직접 (동기) 대기열에 있지 않고 (비동기식) 신호 처리기에서 실행이 계속된다는 의미에서 '직접 호출'이라고 생각할 수 있지만 설명 된대로 여러 신호 처리기를 연결 순서대로 나열합니다. 또한, 왜 그런 잘못된 코드가 충돌하고 실수로 값을 반환하는 핸들러에 연결하고 있다는 경고 도구가 있습니까? – bootchk

관련 문제