2014-02-27 2 views
1
내 블랙 베리 (10) 캐스케이드 응용 프로그램

블랙 베리 10 폭포가 - 어떻게 다른 CPP 클래스로 이동합니다

  1. Home.cpp
  2. FirstPage.cpp의 세 가지 다른 CPP 클래스가 있습니다

  3. SecondPage.cpp

홈 페이지에는 사용자가 나머지 페이지로 이동할 수있는 두 개의 단추가 있습니다. 이 페이지에는 남은 페이지를 탐색 할 수있는 탐색 창이 있습니다.

FirstPage에는 QML로 만든 UI가 있고 SecondPage에는 C++로만 만든 UI가 있습니다.

버튼 클릭시 어떻게 이러한 페이지로 이동할 수 있습니까? 신호 및 슬롯 메커니즘에 대해 알고 있지만 이러한 클래스의 개체를 만들고 탐색 창 개체로 밀어 넣을 수있는 방법에 대한 아이디어가 없습니다.

코드는 당신은 C++에 navigationpane를 작성하고 QML에서 UI를 구현할 수

답변

1

도움이 될 것입니다. 나는 그것을하고있다. 내 응용 프로그램을 시작하고 내 탐색 창 (qml 파일에서 페이지로드)을 만드는 클래스가 있습니다.

다음으로 "Page1"버튼을 클릭하면 C++에서 메서드를 호출 할 수 있습니다 (설명서에서 C++ 객체를 QML로 노출하는 방법 참조). C++에서는 탐색 페이지의 자식으로 새 페이지를 시작합니다. 이 페이지는 화면에 BACK 버튼을 추가

NewPage::NewPage(QObject *parent, bb::cascades::NavigationPane *navigationPane) 
    : QObject(parent) 

    { 
     m_parent = parent; 

     m_navigationPane = navigationPane; 

     m_qml = bb::cascades::QmlDocument::create("asset:///qml/UserInput/newpage.qml").parent(this); 

     initUI(); //Were you should initialize all of your UI 

     m_page = m_qml->createRootObject<bb::cascades::Page>(); 
     m_page->setObjectName("PageName"); 
     m_navigationPane->push(m_page); 

    } 

아래에 제시하고 해당 버튼을 클릭하면, 신호 popFinished(bb::cascades::Page* page)는 emmited된다. (당신이 navigationpane를 만들 경우) 당신은 내가했던 것처럼 당신의 메인 페이지에 슬롯이 신호를 연결할 수 있습니다

void MainPage::popFinished(bb::cascades::Page* page) { 
    delete page; 
} 

각 QML 파일을 다른 C++ 객체에 대한 노출 쉽다. MVC 모델을 사용합니다. 각 qml 파일마다 컨트롤러와 모델이 있습니다. 모델에는 qml에 필요한 모든 특성이 들어 있습니다. 그래서 중앙 C++ 객체에서 새 NewPage()를 호출하면 탐색 창에 포인터를 보내고 있으므로 페이지를 밀어서 나중에 팝할 수 있습니다. 이 컨트롤러에서 당신은 모델과의 게터가 있어야하고,이 같은 페이지를 작성하기 전에 다음 QML에 컨트롤러를 노출 :

은 QML에서 후기
m_qml->setContextProperty("newPageController", this); 

당신의 이름이 컨트롤러에 액세스 할 수 있습니다 " newPageController "입니다. 당신이 다른 페이지를 시작 ++ C에서 메소드를 호출 할 경우

http://developer.blackberry.com/native/documentation/cascades/dev/integrating_cpp_qml/

그런 다음를 만듭니다 QML 사용할 수있는 방법은 내가 확신 도움이 될 것입니다,이 참조하십시오 Q_INVOKABLE 인스턴스화되어야 할 것이다 새 개체를 새 qml에 노출합니다.

+0

안녕하세요 각 qml 페이지의 작업을 처리 할 별도의 CPP 클래스를 만들 수 있습니까? 그렇다면 탐색 페이지가 누를 때 특정 qml과 CPP 클래스를 어떻게 바인딩 할 수 있습니까? – silwar

+0

C++ 또는 QML에서 페이지를 밀고 있습니까? C++에있는 경우 각 페이지에 객체를 할당하고 컨텍스트 속성을 통해 전달할 수 있습니다. qml에서 페이지를 푸시하는 경우 로더 클래스를 사용할 수 있다고 생각하지만이 메커니즘에 익숙하지 않습니다. –

+0

안녕하세요 Filipe, 저는 BB 10 개발을 처음 접했습니다. C++에서 어떻게 할 수 있습니까? 나는 C++에서 그렇게한다면 혼란 스럽다. 그렇다면 각 QML에 대해 별도의 C++ 클래스를 사용할 수있다.BB에서 제공하는 웹 기반 교육을 통과했지만 여전히 BB 10 앱의 프로젝트 구조를 디자인하는 방법에 대해 혼란스러워했습니다. – silwar