C++ QML和C++;整合
这是我在这个论坛上的第一篇文章,刚刚开始BB10开发,也是C++开发,因为我是一个Java人。我在QML和C++集成中有一些问题 以下是我想做的: 我有一个登录页面,在登录按钮上单击“我的新页面”(这是一个导航窗格)可以打开,没有任何问题。这里是我使用的方法C++ QML和C++;整合,c++,qt,blackberry,qt4,blackberry-10,C++,Qt,Blackberry,Qt4,Blackberry 10,这是我在这个论坛上的第一篇文章,刚刚开始BB10开发,也是C++开发,因为我是一个Java人。我在QML和C++集成中有一些问题 以下是我想做的: 我有一个登录页面,在登录按钮上单击“我的新页面”(这是一个导航窗格)可以打开,没有任何问题。这里是我使用的方法 void Integration:penNextPage() { printLog("-- open second page (a navigation pane "); new SecondPageHndlr (appRe
void Integration:penNextPage() {
printLog("-- open second page (a navigation pane ");
new SecondPageHndlr (appRefrence);
}
以下是我在SecondPageHndlr课程中所做的:
SecondPageHndlr.cpp
#include "SecondPageHndlr.hpp"
#include "ThirdPageHndlr.hpp"
#include <bb/cascades/Application>
#include <bb/cascades/QmlDocument>
#include <bb/cascades/AbstractPane>
#include <bb/cascades/NavigationPane>
#include <bb/cascades/Page>
#include <bb/cascades/Sheet>
#include <QObject>
#include <QIODevice>
#include <iostream.h>
#include <string.h>
#include <stdio.h>
using namespace bb::cascades;
SecondPageHndlr::SecondPageHndlr(bb::cascades::Application *app)
: QObject(app){
try{
QmlDocument *secondQml = QmlDocument::create("asset:///SecondPage.qml");
if (!secondQml->hasErrors()) {
NavigationPane* page = secondQml->createRootObject<NavigationPane>();
if (page)
{
printLog("second page view . page is not null ");
//make this c++ file accessable from the dashboardviewn.qml
pane = page;
secondQml->setContextProperty("second", this );
app->setScene(page);
}
else
printLog("page is null ");
}
else
printLog("Error in second page view QML");
}
catch (std::exception& e)
{
printLog("-------- Exception");
std::cout << "Exception: " << e.what();
}
}
void SecondPageHndlr::showThirdScreen(){
printLog("-- open Third page (a navigation pane pushes a new page");
new ThirdPageHndlr (pane);
}
void SecondPageHndlr::printLog(const char *str){
cout <<"\n" << str ;
printf("" ,1);
fflush(stdout);
}
SecondPageHndlr.cpp
#包括“SecondPageHndlr.hpp”
#包括“ThirdPageHndlr.hpp”
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间bb::cascades;
SecondPageHndlr::SecondPageHndlr(bb::cascades::Application*应用程序)
:QObject(应用程序){
试一试{
QmlDocument*secondQml=QmlDocument::create(“asset:///SecondPage.qml");
如果(!secondQml->hasErrors()){
导航窗格*page=secondQml->createRootObject();
若有(第页)
{
打印日志(“第二页视图。页面不为空”);
/使这个C++文件从DASHBOADVIEWN.QML访问
窗格=页面;
secondQml->setContextProperty(“second”,this);
应用->设置场景(第页);
}
其他的
打印日志(“页面为空”);
}
其他的
打印日志(“第二页视图QML中的错误”);
}
捕获(标准::异常&e)
{
打印日志(“例外情况”);
std::cout您已经在使用导航窗格,那么打开任何其他页面都没有问题。请参阅以下qml代码
import bb.cascades 1.0
NavigationPane {
id: navigationPane
Page {
// page with a picture thumbnail
Container {
background: Color.Gray
layout: DockLayout {
}
Button {
horizontalAlignment: HorizontalAlignment.Center
verticalAlignment: VerticalAlignment.Center
text: qsTr("Show detail")
onClicked: {
// show detail page when the button is clicked
var page = secondPageDefinition.createObject();
console.debug("pushing detail " + page)
navigationPane.push(page);
}
attachedObjects: [
ComponentDefinition {
id: secondPageDefinition
source: "DetailsPage.qml"
}
]
}
}
}
}
DetailsPage.qml
Page{
Label{
text: qsTr("Second Page")
}
}如果您的问题与qml集成有关,您应该显示您的qml代码。顺便说一句,我建议您使用qDebug()登录