Design Pattern: Command Pattern

객체에서 다른 객체로 request를 보낼 때, request 내용이 복잡해 지거나 확장이 필요하면, 프로토콜을 따로 설계하게된다. 그렇게 해야 보다 유연해지기 때문이다. request에 대한 프로토콜을 별도의 Command 오브젝트로 구현하는 방법이 바로 Command Pattern이다. request를 보내는 Invoker 객체는 이를 받는 Reciever 객체에 대한 정보가 없어도 되기 때문에(Command 객체가 갖고있다), 두 객체간 coupling을 제거할 더 읽기

Python: Qt QSlider 에 기능추가하기

music player를 만들어 보고 있는데, QSlider가 의외로 기능이 부실해서 그대로 쓸수가 없었다. 미디어 플레이어들을 보면, slider에 클릭 한번으로 위치를 이동하고, 드래그도 부드럽게 되는걸 볼 수 있다. 반면, 기본 QSlider는 임의 위치 클릭이 page 단위 이동을 의미하고, 슬라이더 바를 드래그 할 수 있지만, 자연스럽지 않게 tick 단위로 움직인다. 이를 보완하며 알게된 더 읽기

Python : Qt menu 만들기

윈도우를 생성하고 가장 기본적으로 생성하는 공통 작업이 메뉴만들기일 것이다. 간단하게 메뉴에 대해 알아보려한다. QMainWindow 는 다음과 같이 영역이 구분되어 있다. ( Qt 공식문서 참조 ) 그림에 보이듯이 메뉴는 상단의 Menu Bar 영역에 메뉴가 만들어진다. 메뉴를 만드는 작업은 다음과 같은 과정으로 이루어진다. 메뉴바를 만든다. File, Edit 같은 최상위(팝업) 메뉴를 추가한다. 서브메뉴는 더 읽기

Python QT : QT Designer 사용하기

UI를 만들 때, 코드로 하나씩 만들어가는 방법도 알아야 하지만, 너무 비효율적이다. Qt에는 Qt Designer라는게 있고, UI 초안을 이걸로 만들면 매우 빠르게 생성할 수 있다. Qt Designer 에서 Widget 배치하기 Qt Designer를 처음 접했을 때, Widget들을 어떻게 배치할지 난감했다. 이걸 기록하는 이유도 난감했던 기억을 잊지 않기위해 하는 것이다. 코드로 UI를 구성할 더 읽기

Design Pattern: Observer

블로그나 유튜브를 보면, 구독을 해놓고 새글이나 영상이 올라올 때 알람을 받는다. 이런 상호작용을 게시-구독(Publish-Subscribe)관계라고 한다. Observer pattern은 이처럼 observer를 등록해놓고 대상의 변화에 대한 알람을 받는 경우에 적용되는 design pattern이다. Observer pattern은 callback의 형태로 이미 많은 곳에서 사용하고 있고 경험해봤을 것이다. 안드로이드에서 BroadcastReceiver를 등록해 사용하는 것도 이런 형태의 하나라고 볼 수 더 읽기