Fix crash when accessing custom properties or functions in QML
authorTobias Koenig <tobias.koenig@kdab.com>
Sun, 14 Oct 2012 16:00:39 +0000 (18:00 +0200)
committerTobias Koenig <tobias.koenig@kdab.com>
Sun, 14 Oct 2012 16:00:39 +0000 (18:00 +0200)
It works!!!!! :)

declarativeobjects.cpp
main.cpp
test.qml

index 84ab8d8..86899d5 100644 (file)
@@ -45,7 +45,7 @@ const QMetaObject &ClassName::getStaticMetaObject() \
 } \
 const QMetaObject* ClassName::metaObject() const \
 { \
-  return &ClassName::staticMetaObject; \
+  return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject; \
 } \
 void* ClassName::qt_metacast(const char*) \
 { \
@@ -64,6 +64,7 @@ int ClassName::qt_metacall(QMetaObject::Call call, int id, void **argv) \
       return 0; \
   } else if (call == QMetaObject::InvokeMetaMethod) {\
     QMetaObject::activate(this, id, argv); \
+    id -= 1; \
   } \
   return id; \
 }
index c3e8391..25c0cbe 100644 (file)
--- a/main.cpp
+++ b/main.cpp
@@ -12,8 +12,8 @@ int main(int argc, char **argv)
   timer.setInterval(1000);
   timer.start();
 
-  //DeclarativeWidgetDocument document(QUrl("test.qml"));
-  DeclarativeWidgetDocument document(QUrl("animation.qml"));
+  DeclarativeWidgetDocument document(QUrl("test.qml"));
+  //DeclarativeWidgetDocument document(QUrl("animation.qml"));
   document.setContextProperty("_timer", &timer);
 
   QWidget *widget = document.create<QWidget>();
index 7923e77..96c080b 100644 (file)
--- a/test.qml
+++ b/test.qml
@@ -5,22 +5,18 @@ Widget {
   windowTitle: qsTr("Cool Test App")
   size: Qt.size(300, 500)
 
-  Timer {
-    id: counter
+  property int counter: 0
 
-    interval: 1000
-    running: true
-    repeat: true
-
-    onTriggered: dateLabel.text = Date().toString()
+  function myFunc()
+  {
+    counter++;
   }
 
+  Component.onCompleted: _timer.timeout.connect(myFunc)
+
   VBoxLayout {
     Label {
-      id: dateLabel
-    }
-    Label {
-      text: "Hallo ASCII-safe Kevin!!!"
+      text: "Hallo ASCII-safe Kevin!!! " + counter
     }
     Label {
       id: secondLabel
@@ -38,7 +34,10 @@ Widget {
     }
     PushButton {
       text: "Click me"
-      onClicked: secondLabel.text = "Changed"
+      onClicked: {
+        secondLabel.text = "Changed"
+        counter++
+      }
     }
     HBoxLayout {
       CheckBox {