Qt Quick vs. Qt 위젯 [닫기]


81

저는 Qt를 처음 접했고 Qt Quick Project와 Qt Widget Project의 차이점을 잘 이해하지 못합니다.

사용자가 회전하고 기울일 수있을뿐만 아니라 회전하고 확대 / 축소 할 수있는 육각형 격자를 그리는 프로그램을 만들고 싶습니다. 결국 MIDI 컨트롤러가됩니다. 이를 위해 어떤 유형의 프로젝트가 더 좋으며 그 이유는 무엇입니까?

나는 이것이 데스크톱과 모바일 플랫폼 모두에서 작동하기를 바랍니다.


3
Qt Quick 웹 사이트 에서 약간의 시간을 보내고 예제를 살펴보십시오. 그것이 당신이 필요하다면 그것을 사용하십시오. 그렇지 않은 경우 일반 Qt 위젯 프로젝트에 사용되지만 모바일 플랫폼이 문제가 될 수 있습니다.
Mat

답변:


39

참고 : Qt 위젯은 QML 위젯으로 대체되었습니다. 이 답변은 질문에 대한 응답이며 이제는 이전 Qt 위젯에 대한 역사적 질문입니다.

Qt Quick은 스마트 폰 앱에서 흔히 볼 수있는 멋진 애니메이션 전환을 많이 지원하는 선언적 스마트 폰 스타일의 사용자 인터페이스입니다. Quick은 프로토 타입을 빠르게 개발할 때도 좋은 선택입니다. Qt Widget은 전통적인 데스크톱 지향 UI 모델입니다.

현재 (Qt5 이전), 데스크톱 시스템 기능에 대한 Qt Quick 지원이 부족합니다 (그러나 개선됨). Quick에서는 메뉴, 도구 모음, 대화 상자 및 기타 표준 데스크톱 동작에 대한 지원이 많지 않지만 위젯은 이러한 요소를 매우 잘 지원합니다.

앱이 데스크톱 및 태블릿 플랫폼에서 기본적으로 보이고 느껴지 길 원하십니까, 아니면 고유 한 사용자 정의 UI 위젯을 중심으로 간단한 애플리케이션을 구축하고 있습니까? Mat가 말했듯이 Qt Quick이 원하는 기능을 지원한다면 아마도 가장 빠른 접근 방식이 될 것입니다. 모든 기능을 갖춘 데스크톱 버전을 만들고 싶다면 Qt Widget이 최선의 선택 일 것입니다.


1
둘 다 원합니다. :) 지금은 Qt 위젯 사용.
Anthony

10
이 답변은 제거, 편집 또는 반대 투표를해야합니다. 우리는 현재 Qt 5.0 이후 버전에서 6.0에 접근하고 있으며 Qt 위젯은 QML 위젯으로 대체되었습니다.
Ariel M.

15
QML은 2019 년에도 Qt 위젯을 대체하지 않습니다. 적어도 Qwt, QCustomPlot과 같은 프로젝트를 대체 할 때까지는 그렇지 않은 것 같습니다. 또 다른 구현 방법이 될 때까지 그 이상도 아닙니다.
Andry

1
@Ariel M. Qt 위젯은 대체되지 않으며 적어도 모든 것이 다시 작성 될 때까지 대체 될 수 없습니다.
Andry

1
Qwt 및 QCustomPlot은 타사 프로젝트이며 QtWidget의 일부가 아니므로 이식 여부와 관계가 없습니다. 또한 Anthony는 초보자이며 고도로 사용자 정의 된 UI가 필요한 MIDI 컨트롤러를 만드는 것에 대해 질문하고있었습니다 (Arena, Lemur PS Elements 및 유사한 소프트웨어 참조). QML은 갈 길입니다.
Ariel M.

37

전문적으로 qt 애플리케이션을 개발하는 사람으로서 저는 위젯보다 qml을 언제든지 선택할 것입니다.

위젯은 아주 기본적인 것들에 적합하지만 조금 더 멋진 것을 만들어야한다면 위젯은 곧 부족해질 것입니다.

Qml은 훨씬 더 유연합니다. 제한된 위젯 레이아웃 시스템을 사용하는 대신 원하는 곳에 항목을 고정 할 수 있습니다. 위젯에는 이러한 결함이 가득한 반면 플랫폼 의존성 결함은 거의 없습니다. 그리고 속성 바인딩 시스템을 사용하면 UI를 모델과 동기화하기가 매우 쉽습니다.


3
감사! 귀하의 답변에 명시된 귀하의 전문적 배경을 바탕으로 QML / QtQuick으로 시작하기로 결정했습니다. QtCreator의 * .ui.qml을 쉽게 사용하고 PyQt에서 직접 사용할 수 있다는 사실을 깨달으십시오. Python + QtQuick의 초기 설정을 해결했습니다!
swdev

2
복잡한 데스크탑 프로그램 QtQuick을 사용하면 성능이 좋은 생각입니다 ...
Yousha Aleayoub

레이아웃 API에 대해 충분히 경험하지 못 하셨나요? 위젯으로 할 수없는 QML로 할 수있는 작업의 예가 있습니까? 저는 5 년 이상 전 세계 10,000 명의 사용자가있는 앱에서 Qt와 함께 작업하고 있으며 위젯 만 무제한 전력을 제공하기 때문에 위젯을 사용합니다. QML은 프로토 타입 및 소규모 프로젝트에 적합합니다. 그리고 네, 성능이 중요합니다. 또한 QML은 OpenGL 기반이기 때문에 사용자 기반이 오래된 하드웨어로 가득 차 있다면 이것은 쇼 스토퍼입니다.
Dalamber

37

참고 :이 답변에서 "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 디자인

둘 다 uiQtDesigner와 함께 작동하는 파일을 가지고있어 레이아웃을 설정하고 인터페이스를 만들기위한 높은 수준의보기를 제공합니다. (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 QuickQt Widget 프로젝트에 대한 풍부한 예제를 제공합니다 . 장기적으로 도움을받는 것에 대해 걱정할 필요가 없습니다. (StackOverflow를 잊지 마세요!)

Qt Quick + Qt 위젯

지금까지 우리는 그것들을 별개의 독립 체처럼 취급했습니다. 그러나 QML을 C ++통합 하는 것은 가능합니다 . 이를 통해 Qt 위젯, C ++ 및 기타 모듈을 활용할 수 있습니다. 예를 들어, QtQuick은 C ++에서 QML에 등록 할 수 있거나 등록 해야하는를 제공 TreeView하지 않습니다 TreeModel. 종종가 문제의 분리 의 Qt QML 각각 C ++로 UI 로직으로 분리 프로그램을 권장 여기서 피치.

이는 또한 집중적 인 SQL 쿼리, 알고리즘 또는 비동기 http / xml 요청을위한 백엔드 가 필요한 경우 유용 합니다. 멋지지 않나요? QML / JS 프런트 엔드와 C ++ 백엔드. Fullstack Qt'er. :-)

(내가 시도하지 않은 것은 Python 백엔드를 갖는 것입니다. 아직 PyQt를 건드리지 않았습니다 ...)


7

Qt Quick은 인라인 ECMAscript가 활성화 된 QML, JSON 선언적 언어로 기본 설정됩니다. Qt 위젯을 사용하면 디자이너가 스타일 시트를 만들 수 있으며 개발자는 네이티브 C ++ 코딩을 수행합니다.

QML은 런타임에 처리됩니다. 프레임 워크 내에서 모든 것이 함께 실행될 수 있지만 차이점은 소프트웨어 설계자의 의사 결정에 유연성을 더합니다.


5

먼저 위젯부터 시작해야한다고 생각합니다. 위젯 UI는 이전 경험이 당신이 빨리 쉽게 배울 수있는 프론트 엔드에 관한 것이라면 추가적으로 쉽게 qt를 배울 수 있도록 도와줍니다.

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