Qt

Intergrating QML and C++

이빈(ebeen) 2017. 6. 10. 21:57

[원문] https://doc.qt.io/qt-5/qtqml-cppintegration-topic.html

Integrating QML and C++

QML은 C++ 코드를 통해 쉽게 확장 할 수 있도록 설계되었습니다. Qt QML 모듈의 클래스를 통해 QML 객체를 C++에서 로드하고 조작 할 수 있으며 QML 엔진과 Qt의 메타 오브젝트 시스템의 통합으로 인해 C++ 기능을 QML에서 직접 호출 할 수 있습니다. 이를 통해 QML, JavaScript 및 C++ 코드가 혼합 된 하이브리드 응용 프로그램을 개발할 수 있습니다.


QML과 C++의 통합은 다음과 같은 다양한 기회를 제공합니다.


    > QML 문서 내에서 QML 및 JavaScript를 사용하고 C++ 문서에서 QML 및 JavaScript를 구현하여 사용자 인터페이스 코드를 응용 프로그램 논리 코드와 분리합니다.


    > QML의 일부 C++ 기능 사용 및 호출 (예 : 응용 프로그램 논리 호출, C++로 구현 된 데이터 모델 사용 또는 타사 C++ 라이브러리에서 일부 함수 호출)


    > Qt QML 또는 Qt Quick C++ API의 기능에 액세스 (예 : QQuickImageProvider를 사용하여 이미지를 동적으로 생성)


    > C++에서 자신 만의 QML 객체 유형을 구현하십시오 - 특정 애플리케이션 내에서 사용하거나 다른 애플리케이션으로 배포하기 



일부 C++ 데이터 또는 기능을 제공하려면 QObject 유도 클래스에서 사용할 수 있어야 합니다 . QML 엔진과 메타 객체 시스템의 통합으로 인해 QObject에서 파생 된 클래스의 속성, 메소드 및 신호는 QML에서 C++ 유형의 속성 노출(Exposing Attributes of C++ Types to QML)에 설명 된 대로 QML에서 액세스 할 수 있습니다. 이러한 클래스가 필요한 기능을 제공하면 다양한 방식으로 QML에 노출 될 수 있습니다.


    > 클래스는 인스턴스화 가능한 QML 유형으로 등록 할 수 있으므로 QML 코드의 일반 QML객체 유형 처럼 사용할 수 있습니다.

    > 클래스를 Singleton Type 으로 등록하여 클래스의 단일 인스턴스를 QML 코드에서 가져올 수 있으므로 QML에서 인스턴스의 속성, 메서드 및 신호에 액세스 할 수 있습니다.

 

    > 클래스의 인스턴스는 QML 코드 에 컨텍스트 속성 또는 컨텍스트 개체로 포함될 수 있으므로 인스턴스의 속성, 메서드 및 신호를 QML에서 액세스 할 수 있습니다.


QML 코드에서 C++ 기능에 액세스하는 가장 일반적인 방법입니다. 더 많은 옵션과 세부 사항은 아래의 섹션에서 설명하는 주요 문서 페이지를 참조하십시오. 또한 QML 에서 C++ 기능에 액세스 할 수있는 기능 외에도 Qt QML 모듈은 C++ 코드에서 QML 객체를 역순으로 조작 할 수있는 방법을 제공합니다. 자세한 내용 은 C++에서 QML 객체와 상호 작용 을 참조하십시오.


마지막으로 C++ 코드는 독립 실행형 응용 프로그램 또는 라이브러리로 배포 할 것인지 여부에 따라 C++ 응용 프로그램 또는 C++ 플러그 인에 통합 될 수 있습니다. 플러그인은 다른 애플리케이션의 QML 코드로 가져와 사용할 수있는 QML 모듈과 통합 될 수 있습니다. 자세한 내용 은 C++ 플러그인에서 유형 및 기능 제공을 참조하십시오 .


Exposing Attributes of C++ Classes to QML

QML 엔진과 Qt 메타 객체 시스템의 통합으로 인해 QML을 C++에서 쉽게 확장 할 수 있습니다. 이 통합을 통해 QObject에서 파생 된 모든 클래스 의 속성, 메서드 및 신호에 QML에서 액세스 할 수 있습니다. 속성을 읽고 수정할 수 있으며 메서드를 JavaScript 식에서 호출 할 수 있으며 필요한 경우 신호 처리기가 신호에 대해 자동으로 만들어집니다. 또한 QObject에서 파생 된 클래스 의 열거 형 값은 QML에서 액세스 할 수 있습니다.


자세한 내용 은 QML에서 C++ 유형의 속성 노출(Exposing Attributes of C++ Types to QML) 에 표시를 참조하십시오.

Defining QML Types from C++


QML 유형은 C++로 정의 된 다음 QML 유형 시스템에 등록 될 수 있습니다. 이를 통해 C++ 클래스를 QML 객체 유형 으로 인스턴스화 할 수 있으므로 사용자 정의 객체 유형을 C++로 구현하고 기존 QML 코드에 통합 할 수 있습니다. C++ 클래스는 다른 목적으로 등록 될 수도 있습니다. 예를 들어, 단일 클래스 인스턴스를 QML 코드로 가져올 수 있도록 Singleton Type으로 등록하거나 인스턴스화 할 수없는 인스턴스의 열거 형 값을 사용하도록 등록 할 수 있습니다 클래스는 QML에서 액세스 할 수 있습니다.


또한 Qt QML 모듈은 첨부 된 속성 및 기본 속성과 같은 QML 개념과 통합되는 QML 유형을 정의하는 메커니즘을 제공합니다.


C++에서 사용자 정의 QML 유형을 등록 및 작성하는 방법에 대한 자세한 내용은 C++에서 QML 유형 정의(Defining QML Types from C++) 문서 를 참조하십시오 .


Embedding C++ Objects into QML with Context Properties


C++ 객체와 값은 컨텍스트 속성 과 컨텍스트 객체를 사용하여 로드된 QML 객체 의 컨텍스트(또는 범위 )에 직접 포함될 수 있습니다 . 이는 QML 구성 요소의 컨텍스트에 데이터를 제공하는 Qt QML 모듈에서 제공 하는 QQmlContext 클래스를 통해 이루어 지므로 C++에서 QML로 데이터를 주입 할 수 있습니다.


자세한 내용 은 컨텍스트 속성 을 사용하여 QML에 C++ 객체 포함을 참조하십시오 .


Interacting with QML Objects from C++


QML 객체 유형은 C++에서 인스턴스화하고 속성에 액세스하고 메소드를 호출하고 신호 알림을 수신하기 위해 검사 할 수 있습니다. 이는 모든 QML 객체 유형이 QObject 기반 클래스를 사용하여 구현되므로 QML 엔진이 Qt 메타 객체 시스템을 통해 객체를 동적으로 로드하고 내인 시킬 수 있기 때문에 가능합니다.


C++에서 QML 객체에 액세스하는 방법에 대한 자세한 내용은 C++에서 QML 객체와 상호 작용하는 설명서를 참조하십시오 .


Data Type Conversion Between QML and C++


QML과 C++간에 데이터 값이 교환되면 QML 엔진에 의해 변환되어 QML 또는 C++에서 사용하기에 적합한 올바른 데이터 유형을 가지며 관련 데이터 유형이 엔진에 알려집니다.


엔진에서 지원하는 기본 제공 유형 및 QML과 C++간에 교환 할 때 이러한 유형을 변환하는 방법에 대한 정보는 QML과 C++ 사이의 데이터 유형 변환을 참조하십시오 .