메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

IT/모바일

Qt로 시각적 디자인하기

한빛미디어

|

2002-06-07

|

by HANBIT

15,431

저자: 보드윈 렘트, 역 전순재

모티프, 자바나 윈도우용 X-designer와 같이 전문적인 시각적 디자인 도구가 Qt (그리고 GTK)에는 없다는 비평이 종종 제기된다. 물론 자유, 오픈 소스로 된 시각적 디자인 도구들도 많기 때문에 개발자들은 이러한 것들 중에서 선택할 수 있다. Qt Architect와 같이 어떤 도구들은 상당정도로 섬세한 수준에 도달했지만 어떤 도구들(viPyl)은 그냥 개념을 증명하는 정도의 단계에 머물고 있을 뿐이다. 트롤테크(Trolltech AS)사는 오랫동안 기다려온 Qt Designer를 배포할 시점에 임박했다. Qt Designer는 섬세하고, 안정적이며, 많은 기능을 갖춘 시각적 디자인 도구이다. 우연하게도 필자는 배포 버전을 미리 시험해 볼 기회를 가져 보았다.

디자인 도구의 종류

시각적 디자인 도구로는 다음과 같은 세 가지 종류가 있다(코드를 만들어 내는 도구, 실행시간에 번역되는 리소스 파일을 만들어 내는 도구, 코드와 디자인을 서로 엮는 도구). Qt Designer는 첫 번째 범주에 들어가는 시각적 도구로 XML 파일을 만들어 내는데, 이 파일은 uic라는 별개의 컴파일러에 의해서 C++ 코드로 컴파일되어 들어간다. 두 번째 범주에 속하는 시각적 도구로 Glade가 있는데 이 도구는 XML 파일을 생성해 내며 libglade가 이 파일을 읽는다(Glade는 C를 출력결과로 생산할 수도 있음). 세 번째 범주에 속하는 시각화 도구중 가장 좋은 예는 Visual Basic인데, 여기에서는 구이(GUI) 디자인과 코드 디자인을 분리할 수 없다.

각 접근법은 나름대로의 장단점이 있다. C++ 코드를 만들기 때문에 애플리케이션의 속도는 빠르지만 유연하지는 않다. 만약 구이(GUI)가 변경되면 그 애플리케이션은 다시 컴파일되어야 한다. 실행시간 읽기 자원 파일은 요구하는 유연성을 최대한으로 제공하기는 하지만 속도가 상당히 느릴 수 있다. 사용자는 2초 이내에 대화 창이 튀어 나오기를 기대한다! 인터페이스 디자인에 사용하던 도구와 똑같은 도구로 애플리케이션 코드를 작성하면 원형개발(prototyping)을 신속하게 할 수는 있겠지만, 종종 일관성 없는 애플리케이션 기반구조라는 결과가 되며 그에 따라 유지 보수성을 결여하게 되는 경향이 있다.

디자인 도구의 특징

시각적 디자인 도구는 어떤 종류이든지 간에 같은 인터페이스를 과시한다. 위젯을 가진 팔레트(palette), 그 위젯을 올려 놓을 캔버스(canvas), 그리고 그 위젯들을 재단할 속성 표(property sheets)가 그것이다. 이것을 제외하고는 세부적으로 아주 작은 차이들만 있을 뿐이다. 다음은 이러한 디자인 도구들을 평가하는데 도움을 줄 특징들이다.
  • 디자인 도구가 쉽게 서드 파티 위젯들을 쉽게 합병할 수 있는가? 그렇지 않으면 기본 구이(GUI) 라이브러리에 포함된 위젯들과 작동하기만 할 뿐인가?
  • 디자인 도구가 레이아웃을 관리하는가? 그렇지 않으면 모든 위젯이 고정된 크기로 고정된 장소에 배치되는가?
  • 변경은 환원할 수 있는가?
  • 관련된 대화내용(dialogs)들이 프로젝트로 배정될 수 있는가?
  • 디자이너에서 직접 코드를 만들어 낼 수 있는가? 아니면 별도 컴파일러가 필요한가?
  • 디자인 도구가 여러 언어로 된 코드를 만들어 낼 수 있는가? 아니면 한 가지 언어로만 코드를 만들어 낼 수 있는가?
  • 메뉴와 도구바(toolbars)를 만드는 데에도 디자인 도구를 사용할 수 있는가?
  • 디자인 도구가 구이 라이브러리의 특수 속성(properties)들을 얼마나 잘 처리하는가?
Qt의 세계에서 사용할 수 있는 광범위한 도구 집합을 떠나, 트롤테크의 Qt Designer 보다 앞서 나온 시각적 디자인 도구들의 기본적인 특징에는 무엇이 있는지 간단하게 살펴보고 넘어가자.
  • Qt Architect
  • QtEZ
  • Ebuilder
  • KDevelop
  • ViPyl
  • XML-builder
이상 제시된 시각적 디자인 도구 중 제프 해리스(Jeff Harris)와 클라우스 에브너(Klaus Ebner)가 만든 Qt Architect가 아마도 가장 성숙한 모듈일 것이다. Qt Architect는 비록 저수준이기는 하지만 레이아웃 관리를 지원하고, 수공(home-made) 위젯들을 팔렛트에 아주 쉽게 추가할 수 있다. 최신 버전은 대화 내용들을 XML 포맷으로 저장한다. Qt Architect는 xml 파일 포맷만을 사용하여 대화내용을 저장한다(대화가 끝나면 Qt Architect는 C++ 코드를 만들어 냄). 그렇지만 XML 포맷이 모든 사람에게 적당한 것은 아니다. Qt Architect가 C++ 코드 대신 파이썬 코드를 생성하도록 하거나 XML 파일을 자원 파일로 사용하여 실행 프로그램을 만들어 내려면 아마도 상당한 어려움이 따를 것이다. 게다가 많은 시간을 소비할 것이 확실다. Qt Architect가 완전하게 안정적인 것은 아니다(너무나 복잡하게 레이아웃을 잡으면 레이아웃 에디터가 충돌할 수도 있음).

QtEZ 역시 잘 개발된 프로젝트이다. 샘 매그너슨(Sam Magnusson)이 처음으로 만들었고 지금은 잔 프로콥(Jan Prokop)이 관리하고 있다. QtEZ는 Qt/C++ 프로젝트 개발을 위한 환경을 완벽하게 제공하고 있다. 이 환경에는 메이크파일 생성, 소스 코드 편집, 대화적 디자인이 포함되어 있다. 또한 QtEZ는 레이아웃 관리를 지원 한다.

Ebuilder는 어니 반 데어 미어(Ernie van der Meer)가 만들었으며 버전 1.0에 근접하고 있다고 한다. 컴파일에 실패했기 때문에 더 자세한 사항은 말할 수 없다.

샌디 메이어(Sandy Meier)와 헌신적인 개발자 팀이 만든 KDevelop 역시 성숙하고 완전한 C++ 개발 환경이다. 개발 환경으로서는 뛰어난 클래스 브라우저(class browser)를 가진 대단히 훌륭한 환경이다. 그러나 대화적 디자이너(dialog designer)는 상당히 원시적이며 레이아웃 관리를 전혀 지원하지 않는다.

ViPyl과 XML-Builder는 소스 코드 생성과는 다른 접근법을 시도한다는 점에서 흥미롭다. 해닝 슈로더(Henning Schroeder)가 만든 ViPyl은 코드와 레이아웃 디자인을 통합하여 제공함으로써 Visual Basic과 똑 같은 방식으로 작업하려고 시도한다. ViPyl은 파이썬에 기반을 두고 있지만 안타깝게도 상당히 초기 단계에 머물러 있다. 데이비드 쉬어(David W. Schere)가 만든 XML-builder는 XML 파일을 사용하여 대화내용(dialogs)을 실행시간(run-time) 코드로 만들어 낸다. XML-builder는 파이썬 기반으로 되어있고 PyQt 대신 폐기된 PythonQt 바인딩을 사용할 정도로 너무 오래 되었다.

Qt 디자이너로 들어서기


[그림 1] QT Designer의 "about" 화면 (더 큰 그림을 보려면 클릭)
Qt Architect와 QtEZ가 아주 좋은 해결책임에는 틀림없지만 트롤테크(Trolltech)는 오래 전부터 자사의 구이 구축기(GUI builder)에 큰 기대를 걸고 있었다. 그리고 결국 그 약속을 지켰다. 트롤테크가 배포한 구이 구축기는 최신 버전의 Qt 라이브러리가 필요하다. Qt Designer는 속성(properties)과 같은 가장 진보적인 특징들을 이용하여 대화 창, 마법사, 범용 목적의 위젯들을 만들어 낼 수 있다.

기본적으로 위젯을 캔버스에 떨구는 기능과 위젯의 속성(properties)들을 설정하는 기능 외에도, Qt Architect는 다음과 같은 특징들이 있다.
  • 레이아웃 관리(Layout management)
  • 분리된 디자이너/사용자 인터페이스 컴파일러
  • 서드 파티 위젯의 포함
  • 시그널/슬롯(Signals/slots) 연결
  • 탭 순서 설정
  • 가속기 점검(Accelerator checking)
  • 빠른 미리보기
  • 문서

[그림 2] QT Designer의 주 인터페이스 (더 큰 그림을 보려면 클릭)
Qt Designer의 레이아웃 관리는 특히나 똑똑하다. Qt Designer는 배경 뒤에서 상당수의 작업을 처리함으로써 복잡한 메커니즘을 감추어 준다(예를 들어 여백은 자동으로 추가됨). 물론 이러한 관리 시스템으로 인해 어떤 복잡한 조감작업은 달성하기 어려울 수도 있다. 그러나 이는 적어도 Qt Architect로는 더 어렵다는 것을 뜻한다. 그렇지만 실제로 필자가 보기에 이러한 사용상의 용이성은 충분한 제어를 하지 못한다 하더라도 얼마든 사용자가 Qt Designer를 사용한다는 말이다. 특히 자동적인 레이아웃 관리의 결과물이 심미적으로 아주 마음에 들기 때문에 문제가 되지 않는다고 생각한다.

대단히 중요한 디자인 결정 요소 중 하나는 디자이너 도구와 사용자 인터페이스 컴파일러인 uic를 분리시킨 것이다. Qt Architect에서 C++ 생성 코드는 구이(GUI) 디자이너로 작성되기 대문에 다른 언어를 위해서 그 코드 생성기를 다른 코드 생성기로 바꾸기는 정말 어렵다. 이런 결정이 의미하는 바는 .ui라는 XML-파일 포맷이 대단히 현명한 선택이라는 것을 뜻하기도 한다. 이것은 곧 .ui 파일을 재단 도구(custom tools)로 처리할 수 있다는 것을 의미한다(기업적 개발 환경에서는 상당히 중요한 고려대상).


[그림 3] Qt Designer의 조감 관리는 특히나 똑똑하다 (더 큰 그림을 보려면 클릭)
제 3자 위젯에 대해 살펴보면 그 위젯들은 쉽게 Qt Designer에 포함시킬 수 있다. 어떤 코드도 입력할 필요가 없다. [그림 4]에 보이는 대화 상자를 그냥 채우기만 하면 된다.

Qt 시그널/슬롯(signals/slots) 메카니즘은 대단히 혁신적으로 지원된다. 개발자는 그냥 시그널-발산 위젯에서 시그널-접수 위젯까지 줄만 하나 그으면 된다. 그러면 박스 하나가 튀어 나와 적절한 시스널과 슬롯을 모두 보여준다. 이때 개발자는 연결하고 싶은 시그널과 슬롯을 선택만 하면 연결은 자동으로 이루어지는 것이다!


[그림 4] 서드 파티 위젯을 쉽게 포함시킬 수 있다 (더 큰 그림을 보려면 클릭)
비주얼 베이직 작업을 해 본 사람이라면 한 폼에서 콘트롤의 탭 순서를 올바르게 만드는 일이 얼마나 괴로운 일인지 이해할 것이다(수십 가지의 서드파티 도구들을 사용할 수 있지만 여전히 까다로운 작업). 그러나 Qt Designer가 제시한 해결책은 놀랍도록 단순하다. 번호를 단 작은 청색 원이 모든 위젯위에 포개어져 있고, 개발자는 원하는 순서대로 그냥 위젯위에 클릭만 하면된다. 마찬가지로 가속기 점검(accelerator-checking) 옵션도 아주 간단하다.

일단 폼이 하나 생성되면 지원되는 스타일의 형태(Motif, CDE, SGI, Windows, Platinum)가 무엇이든 간에 아주 쉽게 그 디자인을 미리 볼 수 있다. 컴파일이 전혀 필요하지 않기 때문에 미리보기에 그렇게 많은 시간이 걸리지 않는다.


[그림 5] 폼 콘트롤의 탭 순서 설정하기 (더 큰 그림을 보려면 클릭)
이외에 고려할 중요 사항은 바로 문서이다. 그 문서가 완성된 것은 아니었지만, 선-배포 복사본을 읽으면서 필자가 확신한 것은 Qt Designer의 문서는 Qt 라이브러리 문서와 같은 수준이라는 것이었다. 다시 말해 산뜻하고 매력적인 스타일로 잘 작성되었으며 정확하고 완전한 최신판 문서라는 것을 뜻한다. 그 문서는 널리 인정받고 있는 책인 『Qt 프로그래밍』을 쓴 마티아스 칼레 달하이머가 작성했다.

물론 몇몇 특징들은 빠져 있다. 실제로 프로젝트라는 개념이 전혀 없다(폼 각자는 각기 존재할 뿐이며, 관련된 폼들을 그룹지을 방법이 전혀 없음). 이것은 또한 한 폼에서 다른 폼으로 시그널(signals)을 연결할 수 없다는 말이기도 하다. Qt Designer는 폼, 마법사, 위젯을 디자인할 수는 있지만, 애플리케이션 윈도우(application windows)를 디자인할 수는 없다. 이는 곧 메뉴 편집기도 없으며, 도구바(toolbar)나 상태바(status bar) 편집기도 없다는 것을 뜻한다. 그러나 두 번째 버전에서는 이러한 모든 특징들을 구현하도록 이미 계획되어 있다.

결론

Qt Designer가 배포되면 Qt를 상업적 용도로 방대한-크기의 개발 프로젝트에 사용하는데 가장 중대한 걸림돌 중의 하나(전문적이고 상업적으로 지원되는 구이(GUI) 디자이너가 없다는 걸림돌)가 불식될 것이다. Qt Designer는 안정적이면서도 아주 쉽게 사용할 수 있다. 그럼에도 불구하고 대단히 혁신적인 특징과 매우 유용한 특징을 가지고 있다. 중요한 것은 Qt Designer의 .ui 파일 포맷이 XML 기반으로 현명하게 디자인되었다는 것이다. 그리고 이러한 파일들로 작업하면 회사내 업무용 도구들을 용이하게 개발할 수 있을 것이다.

위에서 말한 것 외에도 더 좋은 소식이 있다. 이 소식은 마지막을 장식하기 위해 남겨놓은 것인데… Qt Designer를 책임지고 있는 트롤테크의 개발자중 한 사람인 레기날드 스탈바우어(Reginald Stadlbauer)가 필자에게 말해준 것이다. Qt Designer가 곧 완전한 소스와 함께 Qt의 프리 에디션(free edition)에 포함될 것이라고 한다. 그리고 결정판은 Qt 2.2와 함께 배포될 것이다.

보드윈 렘트(Boudewijn Rempt)는 모바일 에이전트 회사(mobile agent company)인 Tryllian사의 선임 개발자로 초창기부터 PyQt로 작업해 왔다.
TAG :
댓글 입력
자료실