ListWidget을 상속받은 클래스에 checkbox를 포함한 item을 넣었는데
checkbox의 체크 여부에 따라 item 텍스트의 색깔을 변경 시키고 싶었다
setStyleSheet를 쓰고 싶었으나 ListWidgetItem이 이 메소드를 지원하지 않았다.
listwidget의 stylesheet를 활용하는 방법을 찾을 수 있었는데 잘 동작하지 않았다. checkbox 가 변경된 하나의 item의 색상만 변경하고 싶었지만 아무 checkbox나 변경될 때 마다 모든 item의 색상이 변경 되었다.
item에 변화가 있을 경우 발생하는 itemChanged 시그널을 처리하는 슬롯을 만들어 그 안에서 setForeground() 메소드로 텍스트의 색깔을 바꾸었다.
동작은 잘 했지만 사소한 문제가 있었다.
이상하게 itemChanged 시그널을 두번 처리하는 것이다.
아마도 setForeground() 메소드 때문인듯 한데
희안하게 딱 두번만 발생한다. (무한 루프에 빠져야 정상 아닌가?)
어쨌건 해결하고 싶었다.
ListWidgetItem에서 checkbox가 변경되었을 때 발생되는 시그널이 무엇인지 알면 좋으련만 그거에 대한 내용은 qt 도큐먼트에도 없었다.
엇추 비슷한 내용을 찾다보니 시그널을 블럭 시킬수 있는 메소드가 있더라..
https://stackoverflow.com/questions/13771694/turn-off-pyqt-event-loop-while-editing-table
qobject로부터 상속받은 모든 클래스가 가지고 있다고 하니 listwidget에도 있으리라..
itemChanged 시그널을 처리하는 메소드에서 item을 변경하기 전에 blockSignals(True) 변경후에 blockSignals(False) 를 호출해주니 원하던 대로 동작한다!!!!!
안정성은 확인 못 했지만 원하던바대로 동작한다
'프로그래밍 > 라이브러리' 카테고리의 다른 글
[PyQt] QMainWindow에서 QMenu 꺼내기 (0) | 2020.05.08 |
---|---|
[PyQt] ui 추출 (0) | 2020.05.06 |
[PyQt] addLayout() / setLayout() 쓰임 (0) | 2020.04.16 |
[PyQt] datime형과 QDate 간의 변환 (0) | 2020.04.15 |
[PyQt] 화면 크기 조정 (0) | 2020.04.14 |