2014-07-12 2 views
2

프로젝트에 QML을 사용하고 있는데, 다른 파일에서 파일을 인스턴스화하는 경우 C++ 클래스의 객체를 인스턴스화하는 것과 같습니까?qml이 객체 지향 프로그래밍을 지원합니까?

난을 File1 초기화가 File2.qml에서

Rectangle { 
    id: idRect2 

    File1 { 
    id:idFile1 
    . 
    . 
    } 
} 

File.qml

Rectangle { 
    id: idRect1 
    . 
    . 
} 

File2.qml은 내가 형을 File1의 객체를 생성 한 의미는 무엇입니까? 이 메커니즘이 어떻게 작동하는지에 대한 지식 (링크)을 공유하십시오. 미리 감사드립니다.

+0

왜이 C++에 태그를 추가 했습니까? –

+0

그래, 나는 그것을 삭제할 수 있지만, 객체 지향 언어에 태그를 붙이면이 질문에 더 많은 반응을 줄 것이라고 생각했다. – Mahesh

+0

@Maheshthere는 대신에 사용할 수있는'oop' 태그입니다. –

답변

2

QML에서 첫 문자를 대문자로 사용하여 파일을 만들면 구성 요소가 생성됩니다. 구성 요소는 OOP 집계 (하위 클래스 화 없음)를 사용하여 구현됩니다. 내가

// MyButton.qml 
import QtQuick 2.0; 
Rectangle { 
    id: base; 
    width: 120; 
    height: 40; 
    color: "lightgray"; 

    Text { 
     text: "foobar"; 
     anchors.centerIn: parent; 
    } 
} 

를 작성하는 경우 그 말은 ... 난, 난 그냥 루트 객체로 사각형을 포함하고, 어떤 방법으로 그것을 configurates 구성 요소를 만들어 그 안에 텍스트 객체를 추가 사각형을 서브 클래스하지 않은 . 구성 요소가 생성 될 때

은 즉시, 간단하게 작성하여 통해 인스턴스 할 수 있습니다 그게 QML에서 작동하는 방법

MyComponent { id: myNewInstance; } 

때문입니다.

컴포넌트 이름 (그러나 C++ 또는 JS의 방법을 정의하는) 클래스의 일종이며 또한 속성의 타입으로서 사용될 수있다 : 다음

property MyComponent theComponent : myNewInstance; 

가 저장할 수 주어진 컴포넌트로 생성 된 객체의 ID로, C/C++ 포인터처럼 약간 작용합니다 :이 속성은 실제 객체에 대한 링크를 보유합니다.

:

하지만 그것 때문에 내 경우에는 하위 클래스보다 더 많은 집계, 또한 파생 구성 요소의 ID를 보유 할 수있는 사용자 지정 구성 요소의 루트 객체의 type의 속성, 경우에도 QML가 디자인 된 방법의

property Rectangle theComponent : myNewInstance; 

이미지 나 텍스트 또는 다른 ID를 넣으려고하면 QML 엔진이 호환되지 않는 유형 오류를 발생시킵니다.

도움이되기를 바랍니다.