Add support for context properties
authorTobias Koenig <tobias.koenig@kdab.com>
Sun, 14 Oct 2012 11:16:37 +0000 (13:16 +0200)
committerTobias Koenig <tobias.koenig@kdab.com>
Sun, 14 Oct 2012 11:16:37 +0000 (13:16 +0200)
declarativewidgetdocument.cpp
declarativewidgetdocument.h
main.cpp
test.qml

index 501df74..272a971 100644 (file)
@@ -5,6 +5,7 @@
 #include <QtCore/QCoreApplication>
 #include <QtCore/QDebug>
 #include <QtDeclarative/QDeclarativeComponent>
+#include <QtDeclarative/QDeclarativeContext>
 #include <QtDeclarative/QDeclarativeEngine>
 
 class DeclarativeWidgetDocument::Private
@@ -48,6 +49,16 @@ DeclarativeWidgetDocument::~DeclarativeWidgetDocument()
   delete d;
 }
 
+void DeclarativeWidgetDocument::setContextProperty(const QString &name, const QVariant &value)
+{
+  d->m_engine->rootContext()->setContextProperty(name, value);
+}
+
+void DeclarativeWidgetDocument::setContextProperty(const QString &name, QObject *object)
+{
+  d->m_engine->rootContext()->setContextProperty(name, object);
+}
+
 QWidget* DeclarativeWidgetDocument::createWidget()
 {
   QObject *object = d->m_component->create();
index bd38392..2ad2152 100644 (file)
@@ -12,6 +12,9 @@ class DeclarativeWidgetDocument : public QObject
     DeclarativeWidgetDocument(const QUrl &url, QObject *parent = 0);
     ~DeclarativeWidgetDocument();
 
+    void setContextProperty(const QString &name, const QVariant &value);
+    void setContextProperty(const QString &name, QObject *object);
+
     template <typename T>
     T* create()
     {
index 3c5ea1a..a52f801 100644 (file)
--- a/main.cpp
+++ b/main.cpp
@@ -1,13 +1,19 @@
 #include "declarativewidgetdocument.h"
 
+#include <QtCore/QTimer>
 #include <QtGui/QApplication>
-#include <QtGui/QLabel>
+#include <QtGui/QWidget>
 
 int main(int argc, char **argv)
 {
   QApplication app(argc, argv);
 
+  QTimer timer;
+  timer.setInterval(1000);
+  timer.start();
+
   DeclarativeWidgetDocument document(QUrl("test.qml"));
+  document.setContextProperty("_timer", &timer);
 
   QWidget *widget = document.create<QWidget>();
   if (widget)
index 9e2d50a..7923e77 100644 (file)
--- a/test.qml
+++ b/test.qml
@@ -5,8 +5,21 @@ Widget {
   windowTitle: qsTr("Cool Test App")
   size: Qt.size(300, 500)
 
+  Timer {
+    id: counter
+
+    interval: 1000
+    running: true
+    repeat: true
+
+    onTriggered: dateLabel.text = Date().toString()
+  }
+
   VBoxLayout {
     Label {
+      id: dateLabel
+    }
+    Label {
       text: "Hallo ASCII-safe Kevin!!!"
     }
     Label {