2013-07-26 2 views
0

Я новичок в разработке Blackberry 10. Я создал простой проект каскадов BB 10. Я хочу изменить текст метки с помощью функции C++.Как вызвать функцию C++ из qml и изменить текст Lable

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) функции функции .

HelloBB.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 

HelloBB.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); 
} 

Теперь я хочу, чтобы изменить текст этикетки от Старого Текста метки к пользовательских данному тексту. Я вызываю функцию C++ из qml. Я не знаю, где определить эту функцию и как подключить эту функцию C++ из qml.

Спасибо.

ответ

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

        В основном.QML:

onClicked: { 
     HelloBB.test() 
    } 
0

найти ярлык с помощью C++ вы ча использовать:

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

обязательно добавить:

#include <bb/cascades/Button>

и использовать корень в качестве частной переменной в вашей класс, так что вы можете получить доступ к объекту также другими методами

bb::cascades::AbstractPane *root;

Отношения

Смежные вопросы