Как вызвать функцию C++ из qml и изменить текст метки
Я новичок в разработке 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).
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";
}
В main.qml:
onClicked: {
HelloBB.test ()
}
Найти ярлык через C++, который вы можете использовать:
Label* yourL = root->findChild<Label*>(LabelObjName);
yourL->SetText("my new beautiful text);
не забудьте добавить:
#include <bb/cascades/Button>
и использовать root в качестве закрытой переменной в вашем классе, чтобы вы могли получить доступ к объекту и в других методах
bb::cascades::AbstractPane *root;
С уважением