Blackberry 10 BlackBerry10级联:无法从c++;
在我的项目中,我有两个qml文件,即Blackberry 10 BlackBerry10级联:无法从c++;,blackberry-10,blackberry-cascades,Blackberry 10,Blackberry Cascades,在我的项目中,我有两个qml文件,即main.qml和DetailsPage.qml < >我试图用C++来修改一个标签的文本> DealIsPase.QML < /Cord>,使用 FIDHORD()/方法。< /P> 这是C++文件和Debug Ipul.qML 中的代码。 Myfile.cpp代码: using namespace bb::cascades; AbstractPane *root; AbstractPane *root1; Navigater::Navigater
main.qml
和DetailsPage.qml
< >我试图用C++来修改一个标签的文本> DealIsPase.QML < /Cord>,使用<代码> FIDHORD()/<代码>方法。< /P>
这是C++文件和Debug Ipul.qML
中的代码。 Myfile.cpp代码:using namespace bb::cascades;
AbstractPane *root;
AbstractPane *root1;
Navigater::Navigater
(bb::cascades::Application *app):QObject(app)
{
QmlDocument *qml = QmlDocument::create("asset:///main.qml").parent(this);
QmlDocument *qml1 = QmlDocument::create("asset:///DetailsPage.qml").parent(this);
qml->setContextProperty("_app", this);
qml1->setContextProperty("_app", this);
root = qml->createRootObject<AbstractPane>();
root1 = qml1->createRootObject<AbstractPane>();
app->setScene(root);
}
void Navigater::tr1()
{
Label *tryLabel1 = root1->findChild<Label*>("labelObj");
if(tryLabel1)
{
qDebug()<<"tttt "<<tryLabel1->text(); //initial text
tryLabel1->setText("Hello!!!!!!!") ;
qDebug()<<"yyyy "<<tryLabel1->text(); //changedText gets reflected on DeviceLog but not on UI
}
else
{
qDebug()<<"Not Found";}
}
我所做的更改并没有反映在模拟器中,而是可以在设备日志中看到
是否有任何方法可以从多个页面(即main.qml以外的页面)访问控制对象
您可以查看一下吗。您可以使用导航窗格,将main.qml添加为页面内容,将详细信息页面添加为导航窗格中的附件对象,如
attachedObjects: [
ComponentDefinition {
id: secondPageDefinition
source: "DetailsPage.qml"
}
在主页面中添加操作
onClicked: {
// show detail page when the button is clicked
var page = secondPageDefinition.createObject();
navigationPane.push(page);
}
我认为这将解决您的问题,并在main.cpp页面中更改以下内容
QmlDocument *qml = QmlDocument::create("asset:///main.qml").parent(this);
qml->setContextProperty("_app", this);
root = qml->createRootObject<AbstractPane>();
app->setScene(root);
QmlDocument*qml=QmlDocument::create(“asset:///main.qml)母公司(本公司);
qml->setContextProperty(“\u app”,this);
root=qml->createRootObject();
应用->设置场景(根);
及
void导航器::tr1()
{
Label*tryLabel1=root->findChild(“labelObj”);
if(tryLabel1)
{
qDebug()您可以轻松地在qml中导航,而无需使用c++
1.page1.qml
Page {
id: rootPage
Container {
background: Color.LightGray
layout: DockLayout {
}
Label {
text: "First page"
horizontalAlignment: HorizontalAlignment.Center
verticalAlignment: VerticalAlignment.Center
}
}
actions: [
ActionItem {
title: "Next page"
ActionBar.placement: ActionBarPlacement.OnBar
onTriggered: {
var page = pageDefinition.createObject();
navigationPane.push(page);
}
attachedObjects: ComponentDefinition {
id: pageDefinition
source: "PageTwo.qml"
}
}
]
}
onPopTransitionEnded: {
page.destroy();
}
如果设置应用->设置场景(根);而不是root1。DetailsPage.qml不显示。因此无法看到对它的任何更改。对吗?我假设页面以其他方式显示,在他的示例代码中未显示的点。setScene不是将qml调用到屏幕上的唯一方法。在这种情况下,调用它的代码可以粘贴。这会有所帮助
void Navigater::tr1()
{
Label *tryLabel1 = root ->findChild<Label*>("labelObj");
if(tryLabel1)
{
qDebug()<<"tttt "<<tryLabel1->text(); /////////////intial text
tryLabel1->setText("Hello!!!!!!!") ;
qDebug()<<"yyyy "<<tryLabel1->text(); ////////////changedText gets reflected on DeviceLog but not on UI
}
else
{
qDebug()<<"Not Found";}
}
Page {
id: rootPage
Container {
background: Color.LightGray
layout: DockLayout {
}
Label {
text: "First page"
horizontalAlignment: HorizontalAlignment.Center
verticalAlignment: VerticalAlignment.Center
}
}
actions: [
ActionItem {
title: "Next page"
ActionBar.placement: ActionBarPlacement.OnBar
onTriggered: {
var page = pageDefinition.createObject();
navigationPane.push(page);
}
attachedObjects: ComponentDefinition {
id: pageDefinition
source: "PageTwo.qml"
}
}
]
}
onPopTransitionEnded: {
page.destroy();
}