저는 Qt를 처음 접했고 Qt Quick Project와 Qt Widget Project의 차이점을 잘 이해하지 못합니다.
사용자가 회전하고 기울일 수있을뿐만 아니라 회전하고 확대 / 축소 할 수있는 육각형 격자를 그리는 프로그램을 만들고 싶습니다. 결국 MIDI 컨트롤러가됩니다. 이를 위해 어떤 유형의 프로젝트가 더 좋으며 그 이유는 무엇입니까?
나는 이것이 데스크톱과 모바일 플랫폼 모두에서 작동하기를 바랍니다.
저는 Qt를 처음 접했고 Qt Quick Project와 Qt Widget Project의 차이점을 잘 이해하지 못합니다.
사용자가 회전하고 기울일 수있을뿐만 아니라 회전하고 확대 / 축소 할 수있는 육각형 격자를 그리는 프로그램을 만들고 싶습니다. 결국 MIDI 컨트롤러가됩니다. 이를 위해 어떤 유형의 프로젝트가 더 좋으며 그 이유는 무엇입니까?
나는 이것이 데스크톱과 모바일 플랫폼 모두에서 작동하기를 바랍니다.
답변:
참고 : Qt 위젯은 QML 위젯으로 대체되었습니다. 이 답변은 질문에 대한 응답이며 이제는 이전 Qt 위젯에 대한 역사적 질문입니다.
Qt Quick은 스마트 폰 앱에서 흔히 볼 수있는 멋진 애니메이션 전환을 많이 지원하는 선언적 스마트 폰 스타일의 사용자 인터페이스입니다. Quick은 프로토 타입을 빠르게 개발할 때도 좋은 선택입니다. Qt Widget은 전통적인 데스크톱 지향 UI 모델입니다.
현재 (Qt5 이전), 데스크톱 시스템 기능에 대한 Qt Quick 지원이 부족합니다 (그러나 개선됨). Quick에서는 메뉴, 도구 모음, 대화 상자 및 기타 표준 데스크톱 동작에 대한 지원이 많지 않지만 위젯은 이러한 요소를 매우 잘 지원합니다.
앱이 데스크톱 및 태블릿 플랫폼에서 기본적으로 보이고 느껴지 길 원하십니까, 아니면 고유 한 사용자 정의 UI 위젯을 중심으로 간단한 애플리케이션을 구축하고 있습니까? Mat가 말했듯이 Qt Quick이 원하는 기능을 지원한다면 아마도 가장 빠른 접근 방식이 될 것입니다. 모든 기능을 갖춘 데스크톱 버전을 만들고 싶다면 Qt Widget이 최선의 선택 일 것입니다.
전문적으로 qt 애플리케이션을 개발하는 사람으로서 저는 위젯보다 qml을 언제든지 선택할 것입니다.
위젯은 아주 기본적인 것들에 적합하지만 조금 더 멋진 것을 만들어야한다면 위젯은 곧 부족해질 것입니다.
Qml은 훨씬 더 유연합니다. 제한된 위젯 레이아웃 시스템을 사용하는 대신 원하는 곳에 항목을 고정 할 수 있습니다. 위젯에는 이러한 결함이 가득한 반면 플랫폼 의존성 결함은 거의 없습니다. 그리고 속성 바인딩 시스템을 사용하면 UI를 모델과 동기화하기가 매우 쉽습니다.
참고 :이 답변에서 "Qt 위젯"은 새 Qt 애플리케이션을 만들 때 선택할 수있는 Qt 위젯 애플리케이션을 나타냅니다.
질문이 처음 게시 된 지 7 년이 지났지 만 여기에 그 이후의 모든 발전을 무력화하기위한 " 목표 "2 센트가 있습니다.
Qt Quick 프로젝트는 QML 및 JavaScript를 사용 합니다.
Qt 위젯 프로젝트는 C ++ 코드를 사용합니다. (Qt 용 Python 바인딩 인 PyQt 및 PySide는 Python을 사용합니다.)
따라서 Qt 위젯은 Qt Quick에 비해 낮은 수준으로 간주 될 수 있습니다. 그러나 이것은 장기적으로 Qt 위젯 프로젝트가 더 빨리 실행되고 더 나은 성능을 가질 것임을 의미합니다. Qt 위젯은 네이티브 API ( QtCore 모듈 , Qt 스타일 시트 등)에 더 많이 노출되기 때문에 저수준은 좋을 수 있습니다 . 즉, 데스크톱 개발에 자주 사용됩니다.
Qt Quick은 모바일 개발에 더 적합합니다 (데스크탑 개발에 여전히 사용할 수 있음). 바로 사용할 수있는 팝업 , 애니메이션 , 탭 및 레이아웃, 플리커 블 , 서랍 및 일반적인 컨트롤이 있습니다. 모바일 개발에서 모두 유비쿼터스입니다.
둘 다 ui
QtDesigner와 함께 작동하는 파일을 가지고있어 레이아웃을 설정하고 인터페이스를 만들기위한 높은 수준의보기를 제공합니다. (Qt Quick에서 확장자는 .ui.qml
. Qt 위젯에서는 .ui
.) .ui
파일은 필수도 아니고 필요하지도 않습니다. QML / JS 또는 C ++ / Python을 사용하여 프로그래밍 방식으로 디자인 및 레이아웃을 수행 할 수 있습니다.
프로그래밍 이 완전히 처음 이라면 Qt Quick을 먼저 살펴 보는 것이 좋습니다. 개인적으로 Qt Quick은 학습 곡선이 더 부드럽고 무수한 프로젝트를 수행하기 위해 작업하기가 더 쉽다고 생각 합니다. 이유 때문에 "Qt Quick " 이라고 불립니다 . (그래도 Qt 위젯을 내려다 보지는 마세요. QtQuick을 능가하는 멋진 모듈이 있습니다.)
이전에 C ++ 또는 파이썬 프로그래밍 봤는데 경우, 내가 먼저 Qt는 위젯에서 살펴 본다 제안, 자신에 익숙해 신호 및 슬롯 메커니즘 을 (예를 들어 관심을 가질만한 및 모듈 sql
, network
, gui
디자인을 프로그램과 함께) (예를 들어, 데이터 표시를위한 모델 / 뷰 프로그래밍 ).
특히 C ++에서는 이벤트 처리를 수행하는 대부분의 비 Qt 라이브러리에서 while
루프를 사용 하지만 Qt에서는 그렇지 않습니다. 그들은 신호와 슬롯을 사용 합니다 .
결국, 주로 Qt 위젯을 사용하는 경우에도 작업 할 수있는 높은 수준의 선언적 언어를 제공하고 작업을 더 빠르게 설정할 수 있으므로 Qt Quick을 살펴볼 수 있습니다. (특히 모바일 개발 용)
Qt는 포럼 과 함께 Qt Quick 및 Qt Widget 프로젝트에 대한 풍부한 예제를 제공합니다 . 장기적으로 도움을받는 것에 대해 걱정할 필요가 없습니다. (StackOverflow를 잊지 마세요!)
지금까지 우리는 그것들을 별개의 독립 체처럼 취급했습니다. 그러나 QML을 C ++ 에 통합 하는 것은 가능합니다 . 이를 통해 Qt 위젯, C ++ 및 기타 모듈을 활용할 수 있습니다. 예를 들어, QtQuick은 C ++에서 QML에 등록 할 수 있거나 등록 해야하는를 제공 TreeView
하지 않습니다 TreeModel
. 종종가 문제의 분리 의 Qt QML 각각 C ++로 UI 로직으로 분리 프로그램을 권장 여기서 피치.
이는 또한 집중적 인 SQL 쿼리, 알고리즘 또는 비동기 http / xml 요청을위한 백엔드 가 필요한 경우 유용 합니다. 멋지지 않나요? QML / JS 프런트 엔드와 C ++ 백엔드. Fullstack Qt'er. :-)
(내가 시도하지 않은 것은 Python 백엔드를 갖는 것입니다. 아직 PyQt를 건드리지 않았습니다 ...)
Qt Quick은 인라인 ECMAscript가 활성화 된 QML, JSON 선언적 언어로 기본 설정됩니다. Qt 위젯을 사용하면 디자이너가 스타일 시트를 만들 수 있으며 개발자는 네이티브 C ++ 코딩을 수행합니다.
QML은 런타임에 처리됩니다. 프레임 워크 내에서 모든 것이 함께 실행될 수 있지만 차이점은 소프트웨어 설계자의 의사 결정에 유연성을 더합니다.