728x90
반응형

QWidget을 컨테이너로 사용할 때 자식 위젯의 위치를 직접 계산하여 배치하는 것은 상당히
어려울 뿐만 아니라 위젯의 크기가 변경될 때 텍스트가 잘려나가는 등의 문제점이 발생한다.

Qt는 레이아웃(layout) 클래스를 도입하여 이 문제를 해결하고 있다.
예제에서는 QGridLayout, QHBoxLayout, QVBoxLayout 이라는 레이아웃 클래스를 적용하였다.
이를 통해 아래 그림과 같이 구성되며 윈도우 크기를 변경하여도 적절하게 자식 창이 배치되는 것을 알 수 있다.
코드에서 명시적으로 객체  부모-자식관계를 설저하지 않았지만
logon.setLayout(mainLayout) 호출시 자동으로 설정되게 된다.

Qt는 어떤 객체에서 시그널을 발생키기고 이를 슬롯 함수에서 처리하는 시그널-슬롯이라는
독특한 매커니증을 제공한다.

코드에서 buttonOk.clicked.connect(app.quit) 는 Ok 버튼에 반응하여 프로그램을 종료한다.
QPushButton 클래스는 자신이 눌리게 되면 clicked() 라는 시그널을 발생시키며,
QApplication은 close()라는 슬롯 함수를 제공하는데
이 함수는 프로그램을 종료하는 역할을 한다.

원래 C++ Qt에 따르는 예전 문법에서는 다음과 같이 QtCore에 정의된 SIGNAL(), SLOT() 이라는
매크로를 사용한 것이고 코드와 같은 형식은 PyQt5fmf 흉내내어 새롭게 도입된 방법이다.

시그널 슬롯은 Qt에서 제공하는 고수준의 명령 처리방식으로 이해할 수 있으며,
대부분 Qt클래스의 최상위 클래스인 QObject로부터 상속받은 클래스에서 사용가능하다.
한편 저수준 명령처리방식으로 위젯을 대상으로 하는 메세지가 (이벤트)가 있다.

Qt는 다양한 열거변수를 사용한다.
공통적인 열거 변수는 QtCore.Qt에 정의되어 있으며,
개별 클래스에서도 정의되는 경우가 있다.

=============

Widget

Qt 프로그램을 만드는 것은 위젯을 만들고 조합하는 작업이라고 할 수 있다.
사용자가 만든 위젯을 Custom Widget 이라 하는데 해당 위젯은 SubClassing을 통해 만들어낸다

그 방법은 다음과 같다.

1. QWidget을 컨테이너로 사용해 다른 위젯을 그 속에 배치해서 만들거나
( 이 경우도 QWidget에서 상속 받기 때문에 SubClassing 범주에 들어감)

2. 버튼, 입력, 아이템 위젯 같이 Qt가 제공하는 내장위젯(built-in widget)을 subclassing하거나

3. QWidget을 직접 Subclassing 등의 방법을 통해 만들어 낼 수 있다.

이 중에서 (1)은 이미 앞선 Login 예제를 통해 만들어 보았다.
Custom widget 을 만드는 것은

1. 직접 코드로 작성해도 되지만
2. Qt Designer로 시각적으로 form을 작성하여 쉽게 만들 수 있다.

Widget 둘러보기

QWidget의 Child class로 Qt가 제공하는 다양한 위젯이 있습니다.
다음은 주요 위젯을 간단히 정리한 것입니다.

Button
버튼으로는
QPushButton (일반 버튼)
QToolButton (일반버튼과 유사하지만 QAction과 연결할 수 있는 버튼으로 툴바에서에서 주로 사용된다.)
QCheckBox (체크 버튼)
QRadioButton (라디오 버튼) toggle 유지

Action은 Menu, Toolbar-Button, Keboard shortcuts 등을 통합해서 지원하기 위해 도입된 개념이다.

입력 위젯과 표시 위젯

간단히 입력이 가능한 위젯으로는
QLineEdit, (한줄짜리 에디터 위젯)
QComboBox, (드롭다운이 가능한 리스트와 한줄 에디터 위젯이 결합된 위젯)
QSlider
QSpinBox
등이 흔히 사용된다.

여러줄을 편집하는 에디터 위젯으로는
QTextEdit (플레인과 달리 rich text 서식을 줄 수 있다)
QPlainTextEdit (간단한 서식만 줄수 있음)
가 있습니다.

표시 위젯 중에는
QLabel 이 가장 흔히 사용된다.

고급 표시 위젯으로는
QCalender,
QWebView
등이 있다.

컨테이너

다른 위젯에 대한 컨테이너로 사용되는
QGroupBox
QTabWidget  (형태가 변경되는 세련된 다이얼로그 구성)
QStackedWidget (형태가 변경되는 세련된 다이얼로그 구성)
QDockWidget
QSpliter
QScrollArea
등이 있다.


아이템뷰 위젯

아이템을 테이블, 리스트, 트리로 표시하는 위젯으로
QTableWidget
QListWidget
QTreeWidget
등이 있다.

또한 이들과 같은 기능을 하지만 Qt의 모델-뷰 구조를 지원하는
QTableView
QListView
QTreeView
등이 있다.

 

공학자를 위한 PySide2

이 책은 [공학자를 위한 Python](https://wikidocs.net/book/1704)의 자매책이다. #### History * 2019.5.13 : 1차 ...

wikidocs.net

 

728x90
반응형

'Language > Python' 카테고리의 다른 글

Move average  (0) 2022.11.25
Basic Qt Code  (0) 2022.10.26
[PySide] Hello World  (0) 2022.10.26
To change the Python version & Interpreter for VSCODE  (0) 2022.09.08
How to use Numpy  (0) 2022.09.06

+ Recent posts