C++ et QML binding pour sous-item
Bonjour, j'ai un probleme de binding C++/QML. Je n'arrive pas a binder un bouton(child element du root) avec un objet. J'y arrive avec le root mais pas le child. Voila le code C++:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
Q_DECL_EXPORT int main(int argc, char *argv[])
{
QScopedPointer<QApplication> app(createApplication(argc, argv));
TimerObject timerObj;
QDeclarativeView view;
view.setResizeMode(QDeclarativeView::SizeRootObjectToView);
view.setSource(QUrl("../Resources/qml/qmlcpp/main.qml"));
QGraphicsObject* rootObj = view.rootObject();
QDeclarativeItem *myButton = rootObj->findChild<QDeclarativeItem*>("mybutton");
int height = myButton->height();
QDeclarativeContext* ctxButton = qmlContext(myButton);
ctxButton->setContextProperty("timer", &timerObj);
return app->exec();
} |
et le Qml :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
// import QtQuick 1.0 // to target S60 5th Edition or Maemo 5
import QtQuick 1.1
Rectangle {
width: 360
height: 360
Text {
y : 10;
id:myText
text: qsTr("Hello World")
//anchors.centerIn: parent
}
MouseArea {
anchors.fill: parent
onClicked: {
//Qt.quit();
//myText.text = timer.getCurrentDateTime();
//myText.text = "toto";
}
}
Button {
id:mybutton
anchors.centerIn:parent
text: "Test Button"
width: parent.width/2 -10
objectName: "mybutton"
onClicked: {
console.log("Add folder clicked");
text= timer.getCurrentDateTime();
}
}
} |
le TimerObject :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
#ifndef TIMEROBJECT_H
#define TIMEROBJECT_H
#include <QObject>
#include <QDateTime>
class TimerObject : public QObject
{
Q_OBJECT
public:
TimerObject();
virtual ~TimerObject();
Q_INVOKABLE QDateTime getCurrentDateTime() const {
return QDateTime::currentDateTime();
}
};
#endif // TIMEROBJECT_H |
Je rappelle bien que ca marche nickel si je bind le root au TimerObject avec :
Code:
1 2 3
|
QDeclarativeContext *ctxt = view.rootContext();
ctxt->setContextProperty("timer", &timerObj); |
Merci d'avance