2

在我的项目中,我有两个 qml 文件,即。main.qmlDetailsPage.qml

我正在尝试使用方法DetailsPage.qml从 c++更改标签的文本。findChild()

这是 c++ 文件和 DetailsPage.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";}

}

DetailsPage.qml 代码:

// Navigation pane project template

import

 bb.cascades 1.0

Page

 {

   // page with a picture detail

   id: pgDetail


actions: [

  ActionItem {

     title: qsTr("Break")

          onTriggered: {

                 _app.tr1();

                imgView.imageSource = "asset:  //images/picture1br.png"

            }

        }

    ]


paneProperties: NavigationPaneProperties {


backButton: ActionItem {


onTriggered: {                

                navigationPane.pop()

            }

        }

    }


onCreationCompleted: {

        _app.tr1();

    }

   Container {


background: Color.Black


Label {


objectName: "labelObj"    // control to be found


text: "Page 2"


horizontalAlignment: HorizontalAlignment.Center               


textStyle {    


base: SystemDefaults.TextStyles.TitleText


color: Color.Yellow

                      }

        }


ImageView {


id: imgView


imageSource: "asset:///images/picture1.png"    


horizontalAlignment: HorizontalAlignment.Center

        }          

Label {


text: qsTr("Picture description")    


horizontalAlignment: HorizontalAlignment.Center

        }

    }

}

我所做的更改没有反映在模拟器中......但在设备日志中可见。

有没有办法从多个页面访问控制对象,即 main.qml 以外的页面?

你能调查一下吗。

4

2 回答 2

0

您可以在不使用 c++ 的情况下轻松地在 qml 中导航


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();
}

于 2013-09-04T04:39:00.157 回答
0

您可以使用导航窗格,将 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);

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";}

}
于 2013-07-10T05:14:24.070 回答