손으로 코딩 한 GUI 대 Qt 디자이너 GUI [닫기]


115

저는이 휴가를 Qt 애플리케이션 작성을 배우는 데 보내고 있습니다. 몇 시간 전에 Qt Designer에 대해 읽고 있었기 때문에 Qt에서 실제 응용 프로그램을 작성하는 사람들이 GUI를 디자인하는 데 사용하는 것은 무엇입니까? 실제로 사람들은 일반적으로 GUI를 어떻게 디자인합니까?

저는 복잡한 GUI의 경우 Designer가 의미가있을 수 있지만 손으로 ​​코드를 작성하는 것이 개념적으로 Qt Designer를 사용하는 것보다 더 간단하다는 것을 발견했습니다. Designer를 사용하면 대형 GUI가 가능할 수 있지만 시간이 지남에 따라 복잡성이 증가함에 따라 관리하기가 매우 어려워 질 수 있습니다 (이것은 제 의견입니다). 또한 AmaroK 소스 코드를 다운로드하여 그 사람들이 무엇을하고 있는지 살펴 보았고 addWidget ()과 친구들에 대한 많은 호출을 찾았지만 Designer가 만든 XML 파일은 하나도 없었습니다. 모든 플랫폼).

그렇다면 GUI를 만드는 "올바른"방법은 무엇입니까? 디자이너 또는 코드? 이 논의를 위해 다음 유형의 GUI를 고려해 보겠습니다.

  1. 입력을 받고 몇 가지 결과를 표시하고 종료해야하는 간단한 대화 상자입니다. YouTube URL을 가져와 사용자의 하드 디스크에 비디오를 다운로드하는 응용 프로그램을 가정 해 보겠습니다. 초보자가 시작할 수있는 일종의 응용 프로그램입니다.
  2. 도구 모음 / 메뉴 항목이 몇 개있는 스티커 메모 편집기와 같은 중급 수준의 GUI. 예를 들어 xPad ( http://getxpad.com/ ) 를 살펴 보겠습니다 . 대부분의 애플리케이션이 "유틸리티"범주에 속한다고 생각합니다.
  3. AmaroK 또는 OpenOffice와 같은 매우 복잡한 GUI. 눈에서 피를 흘리기 때문에 그들을 보면 알 수 있습니다.

답변:


44

Designer에 대한 우리의 경험은 Qt3에서 시작되었습니다.

Qt3

그 시점에서 Designer는 주로 응용 프로그램으로 컴파일 할 코드를 생성하는 데 유용했습니다. 우리는 그 목적으로 사용하기 시작했지만 생성 된 모든 코드를 편집하면 더 이상 다시 돌아가서 편집 내용을 잃지 않고 다시 생성 할 수 없습니다. 우리는 생성 된 코드를 가져 와서 모든 것을 수작업으로 처리하게되었습니다.

Qt4

Qt4는 Designer에서 크게 향상되었습니다. 더 이상 코드 만 생성하는 것이 아니라 Designer 파일 (xml)에 동적으로로드하고 프로그램에서 실행중인 개체에 동적으로 연결할 수 있습니다. 생성 된 코드는 없지만 Designer에서 항목의 이름을 지정하고 고정해야합니다. 코드를 깨지 않도록 이름으로.

내 평가는 Mac OS X의 Interface Builder만큼 유용하지는 않지만이 시점에서 프로그램에서 직접 Designer 파일을 사용하는 것을 볼 수있었습니다.

우리는 Qt3 이후 Designer로 돌아 가지 않았지만 여전히 프로토 타입을 사용하고 레이아웃을 디버그합니다.

귀하의 문제 :

  1. Qt가 제공하는 표준 대화 상자를 사용하면 벗어날 수 있습니다. QInputDialog를 사용 하거나 QDialog를 하위 클래스 로 만드는 경우 QButtonDialogBox 를 사용하여 버튼에 적절한 플랫폼 레이아웃이 있는지 확인하십시오.

  2. 디자이너 기능이 제한된 xPad와 같이 더 제한된 작업을 수행 할 수 있습니다.

  3. 디자이너만으로는 오픈 오피스와 같은 것을 작성할 수 있다고 생각하지 않지만 그게 요점이 아닐 수도 있습니다.

텍스트 편집기처럼 Designer를 다른 도구로 사용하겠습니다. 한계를 찾으면 새로운 문제에 대해 다른 도구를 사용해보십시오. Designer의 장점 중 하나는 프로그래머가 아닌 다른 사람이 레이아웃을 할 수 있다는 점에 저는 Steve S와 전적으로 동의합니다.


23
uic (.ui 파일 컴파일러)에서 생성 한 코드를 수정할 필요가 없어야합니다. 더 많은 기능이 필요한 경우 생성 된 클래스에서 상속하거나 멤버로 포함하고 필요한 코드를 추가하는 새 클래스를 만듭니다.
Parker Coates

1
Qt3 및 초기 Qt4 (2008 년경)에서 Qt Designer에는 ButtonGroups 지원 부족, 사용자 지정 슬롯, QLayouts 이름 지정 등과 같이 일부에게는 눈에 띄는 여러 기능이 없었습니다. 그러나 지난 5 년 동안은 약 6 년 정도이 모든 문제가 해결되었습니다. 가능한 경우 UI 파일을 사용하는 것을 선호하고 레이아웃을 재구성하는 것이 훨씬 쉽고 유지 관리 할 코드가 훨씬 적습니다.
Brendan Abel

42

Qt Designer 및 기타 툴킷 / UI 도구에 대한 내 경험 :

  • UI 도구는 작업 속도를 높입니다.
  • UI 도구를 사용하면 나중에 레이아웃을 쉽게 조정할 수 있습니다.
  • UI 도구를 사용하면 프로그래머가 아닌 사용자가 UI 디자인 작업을 더 쉽게 / 가능하게 할 수 있습니다.

복잡성은 종종 디자인을 여러 UI 파일로 분할하여 UI 도구에서 처리 할 수 ​​있습니다. 각 파일에 작은 논리적 구성 요소 그룹을 포함하고 각 그룹을 전체 UI를 빌드하는 데 사용되는 단일 위젯으로 취급합니다. Qt Designer의 승격 된 위젯 개념이 이에 도움이 될 수 있습니다.

나는 프로젝트의 규모가 어떤 차이를 만드는지 확인하지 못했습니다. 귀하의 경험은 다를 수 있습니다.

UI 도구로 만든 파일 (정말 원하면 직접 작성할 수 있음)은 종종 런타임에 동적으로로드 될 수 있습니다 (Qt와 GTK + 모두이 기능을 제공합니다). 이는 다시 컴파일하지 않고도 레이아웃을 변경하고 테스트 할 수 있음을 의미합니다.

궁극적으로 원시 코드와 UI 도구가 모두 효과적 일 수 있다고 생각합니다. 아마도 환경, 툴킷 / UI 도구, 그리고 물론 개인적인 선호도에 따라 많이 달라집니다. UI 도구를 좋아하는 이유는 빠르게 시작하고 실행하고 나중에 쉽게 변경할 수 있기 때문입니다.


8

내가 일하는 조직은 몇 년 전에 GUI 애플리케이션을 Qt로 포팅했습니다. 언급 할 가치가있는 몇 가지 측면이 있다고 생각합니다.

  • 적어도 그 시점에서 Qt Designer로 작업하는 것은 현실적인 옵션이 아닙니다. Qt Designer로 할 수없는 기능이 너무 많았습니다.
  • 보존해야하는 규칙과 구조로 인해 Qt Designer를 사용할 수 없습니다.
  • Designer없이 시작한 후에는 돌아 가기가 어려울 수 있습니다.
  • 그러나 가장 중요한 측면은 프로그래머가 GUI IDE를 사용하는 대신 vi 또는 emacs를 사용하여 프로그래밍하는 데 매우 익숙하다는 것입니다.

내 자신의 경험은 약으로 거슬러 올라갑니다. Qt3.3을 사용한 4 년은 디자이너에서 대화 상자의 동적 동작을 실현할 수 없었던 것입니다.


8

Qt Designer를 사용하지 않고 Qt에서 복잡한 GUI를 작성하고 유지 관리했다고 말하면, Qt Designer를 좋아하지 않기 때문이 아니라 그런 식으로 작업하지 않았기 때문입니다.

그것은 부분적으로 스타일과 당신이 어디에서 왔는지의 문제입니다 .Qt를 시작했을 때 저는 Dreamweaver와 Frontpage 및 기타 시각적 HTML 도구에 대한 끔찍한 경험을했고 HomeSite로 코드를 작성하고 까다로운 레이아웃을 위해 Photoshop에 의존하는 것을 훨씬 선호했습니다. 문제.

시각적 도구 내에서 유지하려고하지만 잘 이해되지 않은 방식으로 코드를 조정해야하는 시각적 코드 IDE에는 위험이 있습니다.

예를 들어, iPhone 개발을 배우는 동안 '마법의'시각적 요소 ( '연결 검사기의 빈 원에서 인터페이스 빌더 창의 개체로 드래그 ...')를 치면 답답함을 발견했습니다. 나) 평범한 오래된 코드로 이해합니다.

Qt와 함께 행운을 빕니다-훌륭한 툴킷이지만 사용하더라도 Qt Creator는 훌륭한 IDE처럼 보입니다.


7

예를 들어 그래픽 디자이너를 사용하는 이유 중 하나는 Win32의 레이아웃 관리자가 부족했기 때문이라고 덧붙였습니다. 절대 포지셔닝 만 가능했고, 손으로 그렇게하는 것은 그냥 짜증이 났을 것입니다.

2002 년에 Delphi에서 Java for GUI 앱으로 전환 한 이후로 더 이상 디자이너를 사용한 적이 없습니다. 저는 레이아웃 관리자를 훨씬 더 좋아합니다. 예, 상용구 코드를 얻지 만 UI 디자이너에서 객체를 이동하는 데는 상용구를 변경하는 것만 큼 많은 시간이 걸릴 수 있습니다. 게다가 느린 IDE에 갇히게 될 것입니다. 그것은 Java / C #의 경우입니다. OK, Qt (특히 Qt4)의 경우에는 적용되지 않습니다. Qt3의 경우 생성 된 코드를 편집해야하는 이유가 궁금합니다. 다른 파일에 코드를 추가 할 수 없었나요? 어떤 이유로?

논의 된 사례에 대해 : 1) 최소한 라이브러리를 알고 있다면 손으로 코딩 한 GUI가 더 빨리 작성할 수 있습니다. 당신이 초보자이고 그들을 모르는 경우 사용하는 API를 배울 필요가 없기 때문에 디자이너와 함께 시간을 절약하고 덜 배울 수 있습니다. 그러나 "덜 배우는 것"이 ​​핵심 요소이므로 두 경우 모두 Hand Coded GUI라고 말하고 싶습니다.

2) 메뉴 바는 코드를 작성하는 데 매우 성가신 일입니다. 또한 가속기 등과 같은 세부 사항을 생각하십시오. 그러나 그것은 당신이 익숙한 것에 달려 있습니다. 시간이 지나면 디자이너를 가리키고 클릭하여 모든 속성을 수정하는 것보다 상용구를 입력하는 것이 더 빠를 수 있지만 실제로 타자기처럼 입력 할 수있는 경우 (예 : Unix 명령을 입력하는 것이 GUI 사용).

3) 사례 # 2에 대한 답변을 이것으로 확장하겠습니다. Win32 플랫폼의 경우 Win32 리소스를 생성하는 디자이너를 사용하는 것이로드 속도 더 빠를 수 있습니다 (그것에 대해 알 수 없음).

그러나 Qt Designer를 사용할 때 발생할 수있는 잠재적 인 문제에 대해 언급하고 싶습니다. 실제 사례 : 많은 옵션이있는 복잡한 Java 대화 상자 (프로그래머의 텍스트 편집기를위한 기본 설정 대화 상자)를로드하는 데 몇 초 (예 : 10)가 걸렸습니다. 올바른 수정은 프로그래머가 GUI를 빌드하기 위해 각 기본 설정에 별도의 방법을 추가하여 프로그래머 가보고 싶을 때만 각 탭을로드하는 것입니다.

디자이너와 함께 모든 탭과 탭 전환기를 디자인하면 그렇게 쉽게 할 수 있습니까? 수작업으로 코딩 된 GUI가 더 많은 유연성을 제공하는 유사한 예가있을 수 있으며, 이렇게 큰 앱에서는 최적화 목적 일지라도 필요합니다.


5
레이아웃 관리자는 GUI 디자이너와 상호 배타적이지 않습니다. 사실, 어떤 종류의 레이아웃 관리자 개념을 사용하지 않는 GUI 디자이너는 현대 GUI 응용 프로그램의 99 %에서 작업하는 데 쓸모없는 것보다 나쁩니다.
Steve S

7

디자이너를 사용하여 GUI를 만드는 주요 이점 중 하나는 다른 프로그래머가 복잡한 코드를 조사 할 필요없이 쉽게 양식과 위젯을 변경하거나 유지할 수 있다는 것입니다.


5

코드 작성이 그래픽 환경에서 객체를 조작하는 것보다 간단하다고 말하는 것이 이상합니다. 생각할 필요가 없습니다.
디자이너는 당신의 삶을 더 쉽게 만들고 장기적으로 당신의 코드를 더 유지하기 쉽게 만들어줍니다. 디자이너에서 UI가 어떻게 보이는지 확인한 다음 코드를 읽고 어떻게 보일지 상상해 보는 것이 더 쉽습니다.
현재 Qt를 사용하면 디자이너 내에서 거의 모든 작업을 수행 할 수 있으며 수행 할 수없는 작업은 거의 없습니다. 생성자에서 매우 적은 코드 줄로 수정할 수 있습니다. 예를 들어 가장 간단한 예인 신호 슬롯 연결을 추가합니다. 디자이너를 사용하면 두 번 클릭하는 것만 큼 간단합니다. 디자이너가 없으면 신호의 올바른 서명을 찾아보고 .h 파일을 편집 한 다음 편집하여 .cpp 파일에 코드를 작성해야합니다. 디자이너는 이러한 세부 사항을 넘어서서 정말로 중요한 것, 즉 애플리케이션의 기능에 집중할 수 있도록합니다.


3
네, 저에게 깜짝 놀랐습니다.하지만 Qt를 1 년 넘게 사용하면서 몇 년 전부터 그래픽 디자인보다 손으로 쓰는 것이 더 빠른 UI 작업을 할 수 있다는 것을 깨달았습니다. 손으로 작성한 코딩 된 UI가없는 한 가지는 화면에서 실행되기 전까지는 어떻게 보이는지 쉽게 볼 수 없다는 것입니다 (때때로 협동 작업의 중요한 측면입니다).
Joonhwan

1
그녀와 마찬가지로, 저는 디자이너를 용납 할 수 없습니다. 손으로 쓰는 것이 훨씬 더 강력하고 빠릅니다. 나는 디자인을 할 수 있습니다. :) 거의 볼 수 없습니다. 1 년이 지나도 실행할 필요가 없었습니다. 모든 것이 제 뇌의 상상력 층에 매핑되었습니다.
ColdSteel

4

먼저 디자이너에게 GUI 위젯을 개발하는 것을 좋아합니다. 다른 게시물에서 언급했듯이 더 빠릅니다. 또한 "올바른 것 같고"사용자에게 혼란스럽지 않은지 확인하기 위해 즉각적인 피드백을받습니다. 디자이너는 다른 툴킷보다 Qt를 선택하는 주된 이유입니다. 저는 주로 디자이너를 사용하여 일회성 대화 상자를 만듭니다.

그래도 메인 창과 복잡한 위젯을 손으로합니다. 이것이 Trolltech가 의도 한 방식이라고 생각합니다. QFormLayout 은 프로그래밍 방식으로 입력 대화 상자를 쉽게 생성하기 위해 제공하는 클래스입니다.

그건 그렇고, Qt 4의 디자이너는 Qt 3에서와 같은 IDE가 아닙니다. .ui 파일을 편집하기위한 편집기 일뿐입니다. 그 방법이 마음에 들어요. 새로운 크로스 플랫폼 IDE는 Qt Creator라고 불릴 것입니다.


4

오래된 게시물이지만 Amarok에서 파생 된 음악 플레이어 인 Clementine을 살펴 보시기 바랍니다. 그들은 Qt4를 사용하고 내가 볼 수 있듯이 프로젝트 의 src 폴더에 ui 폴더가 있습니다. 에서 UI를 폴더 하나는 .ui 파일의 모든 종류를 예상 할 수있다. Clementine을 컴파일하고 시작하면 GUI가 상당히 복잡하고 훌륭하다는 것을 알 수 있습니다.


3

나에게는 위젯 / GUI에 얼마나 많은 로직 이 캡슐화되어 있는지에 따라 다릅니다 . 단순한 양식에 관한 것이라면 QtDesigner를 선호합니다.

복잡한 검사 나 상호 작용이 포함되어 있으면 프로그래밍하는 경향이 있습니다.


MFC 앱에는 모두 매우 유사한 여러 창 대화 상자가 있습니다. 최근에 모든 컨트롤을 단일 대화 상자에 넣고 앱의 현재 모드에 따라 특정 컨트롤을 숨기고 재배치하려고했습니다. Qt에서 프로그래밍 방식으로 컨트롤을 쉽게 구축 할 수 있다는 말입니까? 제 경우에 더 쉬울 지 궁금합니다. 당신의 생각을 듣고 싶습니다.
mitch

Mitch, 예, Qt에서는 프로그래밍 방식으로 컨트롤을 구축 할 수 있으며 매우 쉽습니다. 또한 Qt는 동적 레이아웃을 사용하므로 대화 상자가 여전히 좋아 보이고 확인란을 하나 추가하든 20 개를 추가하든 사용할 수 있습니다.
조지 Y.

2

누군가 Gui를 만들어야하는 경우 Qt Designer를 사용하고 있습니다.
문제는 특정 작업 (클래스 디자인에서하는 것처럼)을위한 작은 위젯을 만든 다음 "부모 GUI"로 모으는 것입니다.

이렇게하면 위젯을 재사용 가능성이 높고 모듈 방식으로 Guis에 사용할 수 있습니다. 각 위젯이 보내는 신호와 제공하는 슬롯을 지정하기 만하면됩니다.

또한 빌드 프로세스 중에 생성 될 수있는 .ui-Files를 생성하고 있습니다. 지금까지는 이러한 파일을 직접 편집 할 필요가 없었습니다.


0


QtDesigner를 사용하여 다른 .ui 파일에서 UI의 다른 부분을 빌드
한 다음 코드에서 함께 가져 와서 합병증을 추가합니다.

Qt Designer에서는 할 수없는 일이 있고, 코드에서만 할 수있는 일이 있습니다.
따라서 Qt Designer는 도구 체인 의 한 부분 일뿐 입니다.


@MOnsDaR이 말한대로 정확하게 오
dave
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.