From 5d5b744038f872f45ab7e3490d30772fcf7da245 Mon Sep 17 00:00:00 2001 From: Tobias Koenig Date: Sun, 14 Oct 2012 18:00:39 +0200 Subject: [PATCH] Fix crash when accessing custom properties or functions in QML It works!!!!! :) --- declarativeobjects.cpp | 3 ++- main.cpp | 4 ++-- test.qml | 23 +++++++++++------------ 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/declarativeobjects.cpp b/declarativeobjects.cpp index 84ab8d8..86899d5 100644 --- a/declarativeobjects.cpp +++ b/declarativeobjects.cpp @@ -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; \ } diff --git a/main.cpp b/main.cpp index c3e8391..25c0cbe 100644 --- 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(); diff --git a/test.qml b/test.qml index 7923e77..96c080b 100644 --- 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 { -- 1.7.2.5