{{위키데이터 속성 추적}}
{{infobox programming language
| name = QML
| paradigm = [[프로그래밍 패러다임]]: [[선언형 프로그래밍|선언형]], [[반응형 프로그래밍|반응형]], [[스크립트 언어|스크립트]]
| year = {{시작 날짜와 나이|2009}}
| developer = [[Qt 프로젝트]]
| latest_release_version = 5.12.1<ref>{{웹 인용|url=https://blog.qt.io/blog/2019/02/01/qt-5-12-1-released/|title=Qt 5.12.1 Released}}</ref>
| latest release date = {{시작 날짜와 나이|2019|02|01}}
| typing = [[자료형 체계|dynamic]], [[스트롱 타이핑|strong]]
| influenced_by = [[XAML]],<ref>{{웹 인용|title=Which interface for a modern application?|url=https://www.scriptol.com/ajax/ajax-xul-xaml.php|website=scriptol}}</ref> [[JSON]], [[자바스크립트]], [[Qt (프레임워크)|Qt]]
| influenced = [[Qt (프레임워크)|Qt]], 링(Ring)<ref name="The Ring programming language and other languages">{{웹 인용 |url=http://ring-lang.sourceforge.net/doc1.6/introduction.html#ring-and-other-languages |title=The Ring programming language and other languages |author=Ring Team |date=5 December 2017 |work=ring-lang.net |publisher=[[ring-lang]] |확인날짜=2020-04-22 |archive-date=2018-12-25 |archive-url=https://web.archive.org/web/20181225175312/http://ring-lang.sourceforge.net/doc1.6/introduction.html#ring-and-other-languages |url-status= }}</ref>
| website = {{URL|qt-project.org/doc/qt-5/qmlapplications.html}}
}}
{{Infobox file format
| name                   = QML
| icon                   = 
| extension              = .qml
| developer              = [[Qt 프로젝트]]
| website                = {{URL|qt-project.org/doc/qt-5/qmlapplications.html}}
| genre                  = [[스크립트 언어]]
}}

'''QML'''(QT 모델링 언어, Qt Modeling Language<ref>{{웹 인용|title=Qt Declarative API Changes {{!}} Qt Blog |url=http://blog.qt.digia.com/blog/2009/08/21/qt-declarative-api-changes/#comment-4727 |archiveurl=https://web.archive.org/web/20140325005611/http://blog.qt.digia.com/blog/2009/08/21/qt-declarative-api-changes/#comment-4727 |archivedate=March 25, 2014 |date=March 25, 2014}}</ref>)은 [[사용자 인터페이스 마크업 언어]]이다. 사용자 인터페이스 중심 애플리케이션을 디자인하기 위한 [[선언형 프로그래밍|선언형]] 언어([[종속형 시트|CSS]]와 [[JSON]]과 유사)이다. 인라인 [[자바스크립트]] 코드는 명령형 관점을 관리한다. [[Qt (프레임워크)|Qt]] 프레임워크로 [[노키아]]가 개발한 UI 생성 키트인 [[Qt 퀵]]과 연동된다. Qt 퀵은 터치 입력, 부드러운 애니메이션, 사용자 경험이 중요한 모바일 애플리케이션에 사용된다. QML은 3D 씬과 프레임 그래프 렌더링 방법론을 기술하기 위해 Qt3D<ref>{{웹 인용|title=Qt 3D Overview {{!}} Qt 3D 5.13.1 |url=https://doc.qt.io/qt-5/qt3d-overview.html |website=doc.qt.io}}</ref>에도 사용된다. QML 문서는 계층형 오브젝트 트리를 기술한다. Qt에 포함된 QML 모듈<ref>{{웹 인용|title=All QML Types {{!}} Qt 5.13 |url=https://doc.qt.io/qt-5/qmltypes.html |website=doc.qt.io |accessdate=September 7, 2019}}</ref>은 명령형 그래픽 빌딩 블록(예: Rectangle, Image), 모델링 컴포넌트(예: FolderListModel, XmlListModel), 행위 컴포넌트(예: TapHandler, DragHandler, State, Transition, Animation), 더 복잡한 컨트롤(예: Button, Slider, Drawer, Menu)을 포함한다. 이 요소들은 단순 버튼, 슬라이더에서부터 완전한 인터넷 지원 프로그램에 이르는 여러 복잡도의 컴포넌트를 빌드할 수 있도록 결합이 가능하다.

QML 요소들은 인라인으로, 또는 .js 파일 포함을 통해 표준 [[자바스크립트]]를 사용하여 증강시킬 수 있다. 또, 요소들은 Qt 프레임워크를 사용하여 심리스하게 [[C++]] 컴포넌트와 통합, 확장이 가능하다.

QML은 언어이다. QML의 자바스크립트 런타임은 커스텀 V4 엔진<ref>{{웹 인용|last=Knoll|first=Lars|date=2013-04-15|title=Evolution of the QML engine, part 1|url=http://blog.qt.io/blog/2013/04/15/evolution-of-the-qml-engine-part-1/|access-date=2018-05-11}}</ref>(Qt 5.2 이후)<ref>{{웹 인용|title=What's New in Qt 5.2|url=http://doc.qt.io/qt-5/whatsnew52.html|access-date=2018-05-11}}</ref>이며 Qt 퀵은 2D [[씬 그래프]] 및 기반 UI 프레임워크이다. 이것들은 Qt Declarative 모듈의 일부이지만 이 기술은 더 이상 Qt Declarative로 불리지 않는다.

QML과 자바스크립트 코드는 Qt 퀵 컴파일러를 통해 네이티브 C++ 바이너리로 컴파일이 가능하다.<ref>{{웹 인용|title=Qt Quick Compiler |url=http://doc.qt.io/QtQuickCompiler/ |accessdate=September 7, 2019}}</ref> 대안으로, QML 캐시 파일 포맷이 있으며<ref>{{웹 인용|title=Deploying QML Applications {{!}} Qt 5.13 |url=https://doc.qt.io/qt-5/qtquick-deployment.html#qml-caching |website=doc.qt.io |accessdate=September 7, 2019}}</ref> 다음 실행 시 더 빠른 시작을 위해 컴파일된 QML 버전을 동적으로 저장한다.

== 문법, 시맨틱스 ==
=== 기본 문법 ===
예:

<syntaxhighlight lang="qml">
 import QtQuick 2.9  // import from Qt 5.9

 Rectangle {
     id: canvas
     width: 250
     height: 200
     color: "blue"

     Image {
         id: logo
         source: "pics/logo.png"
         anchors.centerIn: parent
         x: canvas.height / 5
     }
 }
</syntaxhighlight>

== 각주 ==
{{각주}}

== 외부 링크 ==
* [http://doc.qt.io/qt-5/qmlreference.html QML Reference Documentation]
* [http://doc.qt.io/qt-5/qmlfirststeps.html First steps with QML]
* [http://doc.qt.io/qt-5/qtquick-codesamples.html QML Examples and Tutorials]
* [http://blog.qt.io/ Qt Blog]
* [http://doc.qt.io/qt-5/qml-tutorial.html QML Tutorial]
* [http://wiki.qt.io/Developer_Guidess Qt Developer Guides]{{깨진 링크|url=http://wiki.qt.io/Developer_Guidess }}
* [http://blog.qt.io/blog/2010/10/19/exporting-qml-from-photoshop-and-gimp/ Exporting QML from Photoshop and GIMP]
* [https://www.youtube.com/watch?v=lZypEYdAdOw Application complete invoicing system in QML - Khitomer]
* [https://play.google.com/store/apps/details?id=com.wearyinside.qmlcreator QML Creator]
* [http://qmlbook.org/ QML Book]

=== How-tos ===
* [http://doc.qt.io/qt-5/qtqml-cppintegration-topic.html Integrating QML and C++]
* [http://doc.qt.io/qt-5/qtqml-cppclasses-topic.html Important C++ Classes Provided By The Qt QML Module]

[[분류:선언형 프로그래밍 언어]]
[[분류:Qt]]