문제

내 양식에 몇 개의 확인란이 있으며, 모두 동일한 논리를 구현하기 때문에 각각에 대해 별도의 이벤트 핸들러를 작성하고 싶지 않습니다. 대신 클릭 한 체크 박스에 대해 알 수있는 하나의 이벤트 핸들러 만 작성하고 싶습니다.

예를 들어 델파이에서는 이런 식으로 사용할 수 있습니다.

function click_handler(sender):
begin
    checked_box := sender.tag;
end;

여기서는 일부 변수의 현재 점검 된 상자 번호를 기억합니다 (태그 속성은 Delphi IDE에서 수동으로 설정 됨).

이벤트 핸들러가 없기 때문에 QT를 사용하여이를 구현할 수있는 방법을 찾을 수 없습니다. sender 논쟁.

이렇게 구현했지만 편리하지 않습니다.

# assign handlers (n assignments)
checkbox_1.clicked.connect(self.cb_1_click)
...
checkbox_<n>.clicked.connect(self.cb_<n>_click)

# separate handler for each check box (n functions, doing the same stupid work)
def cb_1_click:
    self.cb_click(sender=1)
...
def cb_<n>_click:
    self.cb_click(sender=n)

# main check box click logic (1 function)
def cb_click(sender):
    # do something common for all checkboxes

고맙습니다.

도움이 되었습니까?

해결책

당신은 사용할 수 있습니다 qobject :: sender () 누가 신호를 방출했는지 알아 내기 위해 슬롯에서.
또한 체크 아웃하고 싶을 수도 있습니다 qsignalmapper 이 문제를 해결하기위한 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top