diff options
-rw-r--r-- | examples/qtobject/qml/qtobject/index.html | 18 | ||||
-rw-r--r-- | examples/qtobject/testobject.cpp | 5 | ||||
-rw-r--r-- | examples/qtobject/testobject.h | 7 | ||||
-rw-r--r-- | src/qobject.js | 21 |
4 files changed, 36 insertions, 15 deletions
diff --git a/examples/qtobject/qml/qtobject/index.html b/examples/qtobject/qml/qtobject/index.html index ab1a542..20d3572 100644 --- a/examples/qtobject/qml/qtobject/index.html +++ b/examples/qtobject/qml/qtobject/index.html @@ -18,20 +18,26 @@ <body> <p>TestObject 1: <a href="#" onclick="testObject1.debugMe('Debugging!', function(result) { output(result); })">invoke method</a> - <a href="#" onclick="testObject1.prop1(function(value) { output(value); })">Get property</a> - <a href="#" onclick="testObject1.prop1 = 'Different property'; testObject1.prop1(function(value) { output(value); })">Set property</a> + <a href="#" onclick="testObject1.prop1(function(value) { output(value); })">Get property 1</a> + <a href="#" onclick="testObject1.prop1 = 'Different property'; testObject1.prop1(function(value) { output(value); })">Set property 1</a> + <a href="#" onclick="testObject1.prop2(function(value) { output(value); })">Get property 2</a> + <a href="#" onclick="testObject1.prop2 = 'Different property'; testObject1.prop2(function(value) { output(value); })">Set property 2</a> <a href="#" onclick="testObject1.timeout.connect(function() { output('timeout 1'); }); testObject1.startTimer(1000);">Timer</a> </p> <p>TestObject 2: <a href="#" onclick="testObject2.debugMe('Debugging!', function(result) { output(result); })">invoke method</a> - <a href="#" onclick="testObject2.prop1(function(value) { output(value); })">Get property</a> - <a href="#" onclick="testObject2.prop1 = 'Different property'; testObject2.prop1(function(value) { output(value); })">Set property</a> + <a href="#" onclick="testObject2.prop1(function(value) { output(value); })">Get property 1</a> + <a href="#" onclick="testObject2.prop1 = 'Different property'; testObject2.prop1(function(value) { output(value); })">Set property 1</a> + <a href="#" onclick="testObject2.prop2(function(value) { output(value); })">Get property 2</a> + <a href="#" onclick="testObject2.prop2 = 'Different property'; testObject2.prop2(function(value) { output(value); })">Set property 2</a> <a href="#" onclick="testObject2.timeout.connect(function() { output('timeout 2'); }); testObject2.startTimer(1000);">Timer</a> </p> <p>TestObject 3: <a href="#" onclick="testObject3.debugMe('Debugging!', function(result) { output(result); })">invoke method</a> - <a href="#" onclick="testObject3.prop1(function(value) { output(value); })">Get property</a> - <a href="#" onclick="testObject3.prop1 = 'Different property'; testObject3.prop1(function(value) { output(value); })">Set property</a> + <a href="#" onclick="testObject3.prop1(function(value) { output(value); })">Get property 1</a> + <a href="#" onclick="testObject3.prop1 = 'Different property'; testObject3.prop1(function(value) { output(value); })">Set property 1</a> + <a href="#" onclick="testObject3.prop2(function(value) { output(value); })">Get property 2</a> + <a href="#" onclick="testObject3.prop2 = 'Different property'; testObject3.prop2(function(value) { output(value); })">Set property 2</a> <a href="#" onclick="testObject3.timeout.connect(function() { output('timeout 3'); }); testObject3.startTimer(1000);">Timer</a> </p> <br/> diff --git a/examples/qtobject/testobject.cpp b/examples/qtobject/testobject.cpp index 75daa8d..260f1f6 100644 --- a/examples/qtobject/testobject.cpp +++ b/examples/qtobject/testobject.cpp @@ -19,3 +19,8 @@ void TestObject::setProp1(const QString& s) qWarning() << __func__ << p1; } +void TestObject::setProp2(const QString& s) +{ + p2 = s; + qWarning() << __func__ << p2; +} diff --git a/examples/qtobject/testobject.h b/examples/qtobject/testobject.h index 992247d..fe5043d 100644 --- a/examples/qtobject/testobject.h +++ b/examples/qtobject/testobject.h @@ -8,11 +8,15 @@ class TestObject : public QObject { Q_OBJECT Q_PROPERTY(QString prop1 READ prop1 WRITE setProp1) + Q_PROPERTY(QString prop2 READ prop2 WRITE setProp2) public: explicit TestObject(QObject *parent = 0); - QString prop1() const { return p1 + objectName(); } + QString prop1() const { return "p1" + p1 + objectName(); } void setProp1(const QString& s); + QString prop2() const { return "p2" + p2 + objectName(); } + void setProp2(const QString& s); + signals: void timeout(); @@ -26,6 +30,7 @@ public slots: private: QString p1; + QString p2; QTimer timer; }; diff --git a/src/qobject.js b/src/qobject.js index d5d7f42..da50efa 100644 --- a/src/qobject.js +++ b/src/qobject.js @@ -69,28 +69,33 @@ function QObject(name, data, webChannel) { }; }); - for (i in data.signals) { - var signal = data.signals[i]; + function connectToSignal(signal) { object[signal].connect = function(callback) { object.__objectSignals__[signal] = object.__objectSignals__[signal] || []; webChannel.exec(JSON.stringify({"type": "Qt.connectToSignal", "object": object.__id__, "signal": signal})); object.__objectSignals__[signal].push(callback); }; } + for (i in data.signals) { + var signal = data.signals[i]; + connectToSignal(data.signals[i]); + } - for (i in data.properties) { - var prop = data.properties[i]; - object.__defineSetter__(prop, function(value) { - webChannel.exec(JSON.stringify({"type": "Qt.setProperty", "object": object.__id__, "property": prop, "value": value })); + function bindGetterSetter(property) { + object.__defineSetter__(property, function(value) { + webChannel.exec(JSON.stringify({"type": "Qt.setProperty", "object": object.__id__, "property": property, "value": value })); }); - object.__defineGetter__(prop, function() { + object.__defineGetter__(property, function() { return (function(callback) { - webChannel.exec(JSON.stringify({"type": "Qt.getProperty", "object": object.__id__, "property": prop}), function(response) { + webChannel.exec(JSON.stringify({"type": "Qt.getProperty", "object": object.__id__, "property": property}), function(response) { callback(JSON.parse(response)); }); }); }); } + for (i in data.properties) { + bindGetterSetter(data.properties[i]); + } } window.setupQObjectWebChannel = function(webChannel) { |