페이지

Include Lists

2017년 8월 1일 화요일

Qt Layout 과 WIdget의 크기 변화에 따른 동작








 What
   - Qt를 사용한 Layout 정렬 및 Resizing 동작 파악

 Why
   - Qt 레이아웃 및 위젯의 크기변화 동작 정리

 Usage
   - QLayout, QWidget, QtAlignment


Application 개발을 하면서 가장 먼저 해야하는것이 UI 배치이다.


사실 UI 배치가 끝나면 그 다음부터는 기능의 구현이기 때문에 UI 배치를 처음에 잘해야 한다.
그러면서도 유연성 있게 해야한다. 왜냐면, 언제든 상황에 따라서 가장 많이 변하고, 빈번하게 바뀌는 것이 UI 이기 때문이다. ( 그래도 알았으면 하는 것 중 하나는 단 하나의 pixel를 맞추기 위해서 엄청난 고정값이 필요하다는 것이다. 그 고정값을 얻기 위해서 많은 빌드&런을 하는 과정이 필요하다. 이 의미는 무엇이냐?! const 값을 찾기 위해 물리적인 시간이 필요하다는 것이다.)

이러한 UI구성을 우리는 Layout이라고 부르고, Qt의 Layout에 대해서 생각을 정리 하고자 한다.
먼저 기본적인 ui 구성을 아래와 같이 잡는다라고 가정을 해보자






Mainwindow 안에 3개의 위젯이 배치되었다고가정하다.

그럼 여기서 생각해봐야 할것들.

전체 크기가 변할 때 각 위젯들의 크기나 위치가 변화하는 방법이다.
그렇다면 각 위젯들의 크기나 위치가 변하기 위해서는 반드시 필요한 것이 있다.

"기준이 되어야 할 무엇, 즉 고정된 위치 또는 크기의 위젯이다."

만일 크기가 커짐에 따라서, 1-2-3 번이 모두 변한다면 고정된 위젯이나 크기는 필요하지 않다.
기본값만 있으면 된다.

근데 만일 1번은 고정되어 있고, 2-3번만 변하는 상황이라면,
1번값은 고정된 크기와 왼쪽 위치에 있고, 2-3번은 기본 크기와 위치만 있으면 된다.

또한 2-3번은 고정이고, 1번이 width는 고정이고 height가 변한다라고 하면,
2-3번의 크기는 고정이고, 1번의 width또한 고정이고, height 에 대해서만 기본 크기가 있으면 된다.
(이렇게 동작하고 있는 근거는 무엇일까를 확인 해 보면, 각 위젯의 크기가 고정일 경우 resize 이벤트가 발생을 안한다.)

이를 위해 간단한 예제 코드를 적용 해 보았다.


             


             


위그림에서 보듯 기본적으로 크기에 따라, 정렬 방법에 따라서 위젯의 크기와 위치를 조절 할 수 있도록 하였다.
완벽하지 않지만, 기본적인 동작은 모두 가능하다.

그런데, 하나 또 깨달은 것 중 하나는, 하나의 위젯이 크기를 결정짓는 것 중, 정렬 방법이 영향을 미친다는 것이다.

단순히 정렬과 크기는 다르다 라고 생각을 했는데,

크기가 커짐 보다 정렬하기 위한 위치가 더 우선시 되고 있다. 그래서 크기가 고정일 때만 정렬 기능이 동작을 하는 것을 확인 할 수 있다.

물론, 어떻게든 해낼 수 있는 방법은 있겠지만, 단순히 예제 프로그램이기 때문에, 기본 동작에 대해서 기능을 구현해 보았다.

제 방법이 정답이 아니기 때문에, 관련 내용에 대해서 수정 또는 조언을 해주시면 감사하겠습니다.

source : https://github.com/holograming/QtDevZone/tree/master/Src/Layout
binary : https://drive.google.com/open?id=0ByvWiBJz6HrFNXNzaXhSeVJ6VEE

댓글 없음:

댓글 쓰기