2013-03-09 3 views
2

BB-10 앱을 작성해야합니다. 앱에 동적 페이지 등의 UI가 상당히 관련되어있을 수 있습니다. 애플리케이션 로직 (데이터 모델 등)을 C++로 작성하려고합니다. UI 디자인에 QML을 사용해야합니까? C++과 QML간에 얼마나 융통성 있고 융통성이 있습니까? ? 몇 가지 문제가 발생하지 않습니까? 내 UI는 많은 QML 페이지 (또는 탐색 창에 표시되는 대화 상자) 으로 구성 될 수 있으며 사용자가 QML에서 몇 가지 작업을 클릭하면 일부 C++ 코드를 호출하거나 다른 QML 페이지 등으로 이동할 수 있습니다. 감사합니다. 도와주기 위해.QML 또는 C++의 디자인 UI, BB10

답변

4

모바일 개발에 대해서는 잘 모릅니다 만 QML이 좋기 때문에 인터페이스를 유지 관리하고 수정하고 다른 장치로 포트하기가 더 쉬워야합니다.

QObject, Q_PROPERTYQ_INVOKABLE 메서드를 사용하여 Qt 프레임 워크를 잘 사용하는 한 QML과 C++의 통합은 쉽습니다 ... 정말 쉽습니다.

편집 : C++에서 QML 객체에 쉽게 액세스 할 수 없다는 것을 추가해야합니다. 이는 QML이 소수의 데이터 유형의 계층 구조로 객체를 구성하기 때문에 findChild 또는 objectName을 사용하여 자식 노드를 동적으로 발견해야하기 때문입니다. QML 속성을 바인딩 할 수 있기 때문에

어쨌든, 당신은 당신의 데이터를 일부 C++ 클래스를 생성하고, 많은 노력없이 UI에에 액세스 할 수 있어야합니다)

+0

내 응용 프로그램에서 다음 아키텍처를 갖고 싶습니다. 아마도 하나의 NavigationPane 객체를 C++로 선언했을 것입니다. 그런 다음 사용자의 행동을 기반으로이 NavigationPane 객체에 페이지를 추가 할 수 있습니다.이 페이지를 추가 할 때 C++ 클래스를 사용하고 openSettingsPage, openUsersDialog 등의 메소드를 사용할 것입니다. QML에서 생각하고 있습니다. 이 페이지의 UI 부분을 구현할 수 있지만 데이터 모델을 관리하는 openSettingsPage.cpp와 같은 해당 C++ 클래스가 있어야합니다. 그러나 나는 또한 상호 작용하기 위해서이 객체들을 필요로한다. 이게 가능하다고 생각하니? 방법? – user2054339

+0

ps. 나는 findChild 메소드에 대해 당신과 동의하고, "바인딩 프로퍼티"에 대한 권고에 대해 고맙다. – user2054339

+0

예, 할 수 있습니다. C++에서는 데이터로 QObject를 만들고 Q_PROPERTY로 속성을 표시 한 다음 QML 구성 요소에 바인딩합니다. 여기에 많은 옵션이 있습니다 ...패널 및 페이지에 대한 QML 구성 요소를 생성하고 QML 자체에서 페이지를 생성 한 다음 C++에서 QML 함수를 호출하거나 패널 및 페이지를 QML에 배치하고 C++을 통해 모든 스폰 및 계층 구조 작업을 수행 할 수 있습니다 . – AkiRoss

1

당신이 필요로 할 때 나는 또한 이러한 상황을 통해 이동 C++을 사용하는 응용 프로그램에 대한 제어가 qml이 아니라 do.best 방식으로 NavigationPane 클래스를 상속하고 거기에 로직을 넣으십시오. 내비게이션 시트 옆에 페이지가 있으면 을 사용하여 첫 번째 페이지를 추가하고이 클래스에 몇 가지 메서드를 추가합니다. Q_INVOKABLE 및 setContext 전달 클래스 때까지 QmlDocument::create() 이러한 메서드를 사용하여 새 페이지를 만들 수 있습니다 .. 마지막으로 추가 또는 처리하는 것을 잊지 마십시오 OnTrasitionEnded(Page*) 페이지를 삭제하고 메모리를 해제하는 신호

+1

게시물을 수정하여 더 읽기 쉽게 만들어주세요. – vonbrand

1

짧은 답변 : C++/QML 통합은 매우 좋습니다. 때때로 매우 장황 할 수 있지만 C++에서는 할 수있는 것이 아무것도 없습니다.

C++의 모든 것을 수행하는 것이 조금 더 빠릅니다. 블랙 베리는 QML/자바 스크립트로 모든 UI 워크 플로우를 코딩하는 아이디어를 추진하고있다.

이점은 비즈니스 로직 & 앱 흐름 간의 명확한 분리입니다. 또 다른 장점은 QML을 작성하고 유지하기를 더 짧게한다는 것입니다. C++로 새로운 QML 객체를 생성 할 수 있다는 것을 잊지 마십시오.

onTriggered: { 
    var item = dataModel.data(indexPath); 
    if (item.count > 0) { 
     appLogic.updateFeed(item.id); 
     navPane.push(resultPage); 
    } 
}