0

我是 Blackberry 10 开发的新手。我创建了简单的 BB 10 级联项目。我想通过 c++ 函数更改标签的文本。

main.qml

      import bb.cascades 1.0    
      Page {
         content: Container {
         id: containerID
         Button {
            id: button1
            objectName: "button"
            text: "text"
            onClicked: {
                btnClicked("New Label Text");
            }
        }
        Label {
            id: label1
            objectName: "label1"
            text: "Old Label Text"
        }
    }
}

现在我要在哪个文件中声明以及在哪个文件中定义函数btnClicked(QString)函数。

你好BB.hpp

// Default empty project template
#ifndef HelloBB_HPP_
#define HelloBB_HPP_

#include <QObject>

namespace bb { namespace cascades { class Application; }}

class HelloBB : public QObject
{
    Q_OBJECT
    public:
    HelloBB(bb::cascades::Application *app);

    virtual ~HelloBB() {}

};

#endif

你好BB.cpp

// Default empty project template
#include "HelloBB.hpp"
#include <bb/cascades/Application>
#include <bb/cascades/QmlDocument>
#include <bb/cascades/AbstractPane>

using namespace bb::cascades;
HelloBB::HelloBB(bb::cascades::Application *app) : QObject(app)
{
    // create scene document from main.qml asset
    //set parent to created document to ensure it exists for the whole application lifetime
    QmlDocument *qml = QmlDocument::create("asset:///main.qml").parent(this);

    qml->setContextProperty("app", this);

    // create root object for the UI
    AbstractPane *root = qml->createRootObject<AbstractPane>();

    // set created root object as a scene
    app->setScene(root);
}

现在我想将标签文本从旧标签文本更改为用户给定的文本。我正在从 qml 调用 c++ 函数。我不知道在哪里定义这个函数以及如何从 qml 连接这个 c++ 函数。

谢谢。

4

2 回答 2

2

您可以在此处找到集成 C++ 和 QML 的文档:http: //developer.blackberry.com/cascades/documentation/dev/integrating_cpp_qml/

作为悬崖的注释:

在您的 HelloBB 构造函数中,您可以像这样将类公开给 QML:

    qml->setContextProperty("HelloBB", this);

然后在 C++ 中创建一个可以从 QML 调用的方法。请记住,该方法必须标记为 Q_INVOKABLE 才能从 QML 调用。

考虑一下:

        在 HelloBB.hpp 中:

    public:
           Q_INVOKABLE void test();

        在 HelloBB.cpp 中:

    void HelloBB::test() {
        qDebug() << "TEST";
    }

        在 main.qml 中:

   onClicked: {
       HelloBB.test ()
   }
于 2013-07-26T12:14:03.227 回答
0

要通过 C++ 查找标签,您可以使用:

Label* yourL = root->findChild<Label*>(LabelObjName); yourL->SetText("my new beautiful text);

请务必添加:

#include <bb/cascades/Button>

并在你的类中使用 root 作为私有变量,这样你也可以在其他方法中访问对象

bb::cascades::AbstractPane *root;

问候

于 2014-08-04T01:42:17.863 回答