2016-09-24 3 views
0

ios & android에서 Qt 5.7을 사용하고 있습니다. qmlRegisterType에 전화를 걸어 QQuickItem보기에서 파생 된 MyClass을 인스턴스화합니다.qmlRegisterType을 수행 한 후 유효한 클래스 인스턴스를 얻는 방법?

qml에서 유효한 MyClass 개체를 다시 얻으려면 어떻게해야합니까?

+0

C++ 측에서 MyClass의 객체가 무엇이 필요하겠습니까? 동일한 결과를 얻을 수있는 더 좋은 방법이있을 수 있습니다. –

답변

1

당신은 당신이 찾고있는 당신은 다음 개체 (들)을 찾기 위해 QObject를 트리를 통과 할 수 QQmlApplication::rootObjects()

참조 엔진의 루트 객체 (들)을 통해 QML 코드에 의해 인스턴스화 된 객체의 트리에 액세스 할 수 있습니다 에 대한.

그러나 C++ 측에서 QML로 인스턴스화 된 객체에 액세스하는 것은 더 나은 방법으로 수행 할 수있는 작업에 대한 해킹 일뿐입니다.

일반적인 경험 법칙은 QML 코드에 따라 C++ 코드를 피하는 것입니다. 즉, 다소 정적 인 C++ 측을 동적 인 QML 쪽의 방식에 의존하지 않도록하십시오.

C++ 쪽에서 데이터 및 기능을 제공하고 QML 측에서 해당 데이터를 사용하고 C++ 기능을 트리거/호출하도록하는 것이 좋습니다.

0

코드에서 MyClass QML 사용자 지정 개체를 QML 개체 라이브러리에 등록했습니다. 즉,이처럼 QML 문서에 QML 구성 요소 MyClass에를 인스턴스화 할 수있는 것 :

import MyClass.1.0 
Item { 

..... 
    MyClass{ 
    } 
} 

그래서 등록 QML 객체는 당신에게 당신의 QML은 당신 샘플 코드에 언급 된 것과 같은 객체 인스턴스화 할 수있는 가능성을 제공 할 것입니다.

원하는 경우 C++ 클래스에서 QML "장면"의 개체에 액세스하려면 Object Scene을로드하고 하위를 크롤링합니다.

Interacting with QML Objects from C++

을 그리고 당신은 좋은보다 더해야한다 :이 문서를 참조하십시오.

한 가지 더 : 저는 C++에서 QML 객체를 읽을 때 가장 많이 사용되는 "처음"속성이 필요하다고 생각합니다. 링크에서이 섹션이 있습니다. "C++에서 QML 객체 유형의 멤버에 액세스" . 시작을 위해 바로 저기로 가라.

+0

포인터 주셔서 감사합니다. 그것은 확실한 방향으로 나를 잡았습니다. "C++에서 QML Object Type의 멤버에 액세스하기"섹션을 읽었습니다. 속성을 qml 항목으로 설정할 수 있다는 것을 이해해야합니다. 여기서 말하는 MyClass는 QQuickitem에서 파생됩니다. 그리고, 나는 setter 메소드 중 하나에 다른 객체 인스턴스를 설정해야한다 :'MyClassObject-> SetOtherObjectInstance (* someOtherObject)'같은 종류의 것을 수행하는 샘플 코드가 있는가? 내가하고있는 일은 희소 한 요구 사항이 아니다. –

+0

C++에서 QML 로의 종속성을 생성하고 QML 트리가 어떻게 보이는지 제한하기 때문에 C++에서 QML 인스턴스화 객체에 대한 포인터를 검색하는 것은 매우 드물다. 'MyClass'가이'someOtherObject'를 필요로한다면,'MyClass'가 그 객체를 검색한다면 더 좋을 것입니다 –