티스토리 뷰

QT프로그래밍을 하실 때 한 위젯에다가 모든 버튼 / 기능을 넣어 버리면 나중에 관리하기가 무척 힘들어 집니다. 그런 상황을 대비해서 각각 기능 별로 Widget을 만들어 놓고, MAIN 에서 관리 하는것이 좋은데요 ,,,, 모든걸 소스코드로 상속 받아서 구현하기는 너무 힘들 겁니다. 그리고 남들이 만들어 놓은 위젯을 가져다 쓰기도 쉽진 않지요.


이런 경우에 이미 QT디자이너나 qtcode로 작성된 코드를 QT designer에서 직접 상속받아 사용을 할 수 있습니다.


어떻게 widget 을 만들고 QTDesigner에서 어떻게 가져다 쓸 수 있는지 설명 드리겠습니다.



<Step1> 이미 누군가 만들어 놓은 ui / pyqt code 를 QT designer에서 상속받아 사용해 보겠습니다. 아래 처럼 consoleview.ui 를 상속받아 써보려고 합니다.




<step2> 새로운 Qt Designer 폼을 생성 합니다. 상속받아 사용하시려면 Widget으로 생성 하시는걸 추천합니다.



<Step3> 새로 만든 프로젝트에서 Widget Containers를 한개 생성해 주시고



<Step4> widget을 생성하면 Object Inspector에서 위젯 오브젝트가 한개 생겼을 겁니다. 여기서 Promote to ... 을 선택합니다.





<Step5> 아래처럼 New Promoted Class 를 생성해 주시면 됩니다. 상속받을 class name과 경로를 설정해 주시면 됩니다. 비록 PyQt 이지만 헤더 파일은 .h 로 끝나게 설정하시면 됩니다.  해당 헤더파일(헤더라 쓰고, 실제론 동작하는 소스코드) 은 pyqt내부에서 .py 로 변환해서 사용하게 됩니다.  



<Step6> 아까 <step5>에서 상속을 받으려는 위젯의 소스코드의 class 이름 입니다. consoleview.ui 를 사용하는 클래스는, 아래 처럼 consoleview.py 라는 이름과, ConsoleView 라는 클래스를 가지고 있습니다. 그리고 qtcode/consoleview.py 에 위치하고 있습니다.  저같은 경우는 pydevtoolplatform/run.py 를 통해 pydevtoolplatform/qtcode/consoleview.py 를 실행시키고 있습니다. 그래서 경로가 qtcode/consoleview.h 가 되는 것이죠.



<Step7> 아래처럼 promote가 끝나면 Class 명이 변경된걸 보실 수 있습니다. 다만 QtDesigner에서 직접 상속받은 클래스의 화면을 볼 수는 없습니다.






여기까지가 qtdesigner에서 pyqt 클래스를 상속받아 사용하는 방법 이었습니다. 코드에서 직접 상속 받아서 구현하려면 모든 ui 파일을 py 코드로 변환시켜서 상속 받아야 하였습니다. 하지만 위 같은 방식으로 구현하게 되면 ui파일로 작성된 pyqt5 코드로 변환시키지 않더라도 상속받아 사용 할 수 있습니다.



아래 사진은 제가 실제로 툴을 만들 때 각 위젯을 상속 받아 구현한 예시 입니다. TesView, SourceView, ConsoleView라는 클래스를 상속받았고, 해당 클래스는 qtdesigner ui 로 작성된 모듈들 입니다. 

<예시1. >


<예시2. 예시1에서 상속받은 class들의 ui 화면들>


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함