PySide 및 PyQt는 trasmistted 데이터 유형이 일치하는 한 임의의/다중 신호를 여러 슬롯에 연결할 수있는 Qt 신호 슬롯 메커니즘을 사용합니다.신호에서 슬롯 연결 해제
시그널링 객체는 수신 슬롯에 대한 어떤 지식을 가지고있다. 자신의 번호를 방법 receivers
으로 알고 있거나 신호가 disconnect
방법을 통해 수신 슬롯에서 끊어 질 수 있습니다.
내 문제는 타당한 방향과 관련이 있습니다. 슬롯은 신호가 연결된 신호를 알고 있습니까? 신호와 슬롯을 분리 할 수 있습니까?
업데이트 : 왜 내가 이것을 묻고 있습니까? 저는 계산을 수행하는 객체를 가지고 있습니다. 계산은 사용자가 편집 할 수있는 Python 표현식에 의해 정의됩니다. 표현식이 파싱되고 필요한 데이터 소스가 다음과 같이 식별됩니다 ... 계산 객체 (슬롯 역할)가 이러한 데이터 소스에 연결 (신호로 작동)하고 데이터 소스가 값을 생성/업데이트하면이 사실은 다음과 같습니다. 슬롯에 신호를 보내고 표현식을 다시 평가합니다. 사용자가 표현식을 변경하면 다시 구문 분석하여 기존 신호 (즉, 데이터 소스)와의 연결을 끊고 새 데이터 소스에 연결해야합니다. 다른 셀에 연결된 Excel의 수식과 같은 것으로 상상할 수 있습니다.
이 문제를 해결할 수있는 몇 가지 방법이 있습니다. 수동으로 연결을 추적하는 것 (추가 작업) 또는 표현 개체를 삭제하고 변경 될 때마다 새 개체를 만드는 것입니다 (사용자가 계산 데이터 원본을 추적 할 수있어 도움이되지 않을 수 있으므로 충분히 좋지 않은 것 같습니다) . 그러나 단순한 신호 슬롯 메커니즘을 사용하여이 문제를 해결할 수 있는지 궁금했습니다. 다른 말로하면, 나는 어떤 해결 방법에도 관심이 없다 ... 나는 그들에 대해 알고 있고 신호를 사용한다. 슬롯은 여기서 도움이되지 않는다. :)
나는 그렇게 생각하지 않는다. 그러나 수동으로 연결과 연결 해제를 추적 할 수 있습니다 (예 :'QObject :: connect' 래퍼 사용). –
수신 개체가 삭제 될 때 수신자 중 하나가 신호를 보내는 것을 멈추도록 신호를 알려야하기 때문에 무언가가 있어야한다고 생각합니다. 그러나 나는 문서에서 아무 것도 발견하지 못했습니다 ... 물론, 수동으로 트랙을 유지하는 것이 나의 다른 대안입니다. 그러나 Qt가 자동으로이 작업을 수행 할 수 있다면 이중 작업을하지 않는 것이 좋습니다. –
잘못된 질문을하는 것 같아요. 어떤 문제를 해결하려고하는지 설명해주십시오. 해결책에 대한 아이디어를 신비한 문제로 수정하는 방법을 묻지 마십시오. 도움을 요청할 때 이것은 아주 흔한 실수입니다. 슬롯이 연결된 곳을 알아야하는 이유는 무엇입니까? 어쩌면이 경우 재귀를 방지하기 위해 일시적인 연결 해제 신호가 필요합니까?가능한 재귀를 막기 위해'blockSignals' 메소드가 있습니다. –