Qt QML은 Qt Quick 기반 사용자 인터페이스를 만드는 데 사용되는 언어인 QML을 실행하는 엔진이다. V8 Javascript 엔진을 (5.11부터 엔진의 새로운 이름은 Qt QML)사용하고 QML 언어 및 ECMAScript 5.1과 호환되며 JavaScript 환경에서 제공하는 전역객체, 조건 연산자, 배열, 변수 설정 및 루프와 같은 표준 구문을 실행할 수 있다.
Qt QML 모듈은 QML 언어로 응용 프로그램 및 라이브러리를 개발하기위한 기본적인 프레임 워크 (그래픽에 의존하지 않는 QML엔진 및 JavaScript 리소스)를 제공하고, Qt Quick 모듈은 QML을 사용하여 사용자 인터페이스를 만드는 데 필요한 모든 기본 유형을 제공한다. 시각적 구성 요소(아이템) 만들기 및 애니메이션, 사용자 입력 수신, 데이터 모델 및 뷰 등을 포함한다. QtQuick 모듈은 QML 응용 프로그램을 작성하기위한 표준 라이브러리인것이다.
Qt QML모듈은 응용 프로그램에 사용되는 QML 프레임 워크와 중요한 QML 타입을 포함하므로 필수로 포함되어야 한다. Qt QML의 사용방법은 QtQml을 import를 통해 사용할 수 있다.
import QtQml 2.12
다음 행도 qmake .pro 파일에 추가한다.
QT += qml
그러면 아래와 같은 QML 언어로 제공되는 기본 타입들을 사용할 수 있다.
bool |
Binary true/false value |
double |
배정밀도 실수형 숫자 |
enumeration |
열거형 |
int |
정수형 숫자, e.g. 0, 10, or -20 |
list |
QML objects의 리스트 |
real |
실수형 숫자 |
string |
문자열 |
url |
리소스 위치 |
var |
일반적인 프로퍼티 타입 |
그밖에 모듈에는 QML 기본 유형 외에 다음과 같은 QML들이 있다.
Component
QtObject
Binding
Connections
Timer
다음은 QML모듈의 사용 예를 보여준다.
MyItem.qml
import QtQml 2.12
QtObject{
// Qt.platform을 이용하면 현재 운영체제도 알 수있다.
property string platform: Qt.platform.os
// Qt 5.10 부터 QML에서 enum을 선언하는 것이 가능하다.
enum MyEnum {
First = 10,
Second
}
}
MyComponent.qml
import QtQml 2.12
Component{
id: mycomponent
Timer{
id: timer
running: true
interval: 2000
onTriggered: {
console.log("quit!!") // console 객체를 사용.
Qt.quit() // Qt전역 객체 사용하여 응용프로그램을 2초후에 종료시킴.
}
}
}
main.qml
import QtQuick 2.12
import QtQuick.Window 2.12
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
MyItem{
id: myitem
}
Loader{
id: loader
}
MyComponent{
id: myComponent
}
Text {
id: name
text: myitem.platform
font.pixelSize: 20
anchors.centerIn: parent
MouseArea{
anchors.fill: parent
onClicked:{
console.log("clicked!! ", MyItem.MyEnum.First)
loader.sourceComponent = myComponent
}
}
}
}
이렇게 QML모듈은 아주 기본적인 유형을 제공하고있다.
일반적인 경우 QtQuick이 QML모듈을 포함하고 있기때문에 QtQuick을 import해줘도 무관하다.
import QtQuick 2.12
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
공지 | Qt프로그래밍(QtQuick) Beginner를 위한 글 읽는 순서 | 운영자 | 2019.01.05 | 86881 |
8 | QML에서 D-Bus 통신 | makersweb | 2023.03.15 | 909 |
7 | QML에서 Websocket 서버와 통신 | makersweb | 2021.09.18 | 893 |
6 | OpacityMask 예제 | makersweb | 2023.01.26 | 757 |
5 | QML과 코루틴(Coroutines) | makersweb | 2020.11.03 | 625 |
4 | QtQuick 애플리케이션에 Rive 애니메이션 통합 | makersweb | 2024.03.31 | 596 |
3 | 앱을 종료할 때 QML 바인딩 오류를 피하는 방법 | makersweb | 2021.08.08 | 546 |
2 | Binding 타입으로 객체 속성 간 묶기 | makersweb | 2022.03.04 | 470 |
1 | 그래픽 소프트웨어에서 디자인 내보내기 (Exporting Designs from Graphics Software) | j2doll | 2020.12.25 | 438 |