From 829abebf3334218182d6b334855e4ae4658575f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rn=20Bersvendsen?= Date: Mon, 19 Sep 2016 11:15:47 +0200 Subject: Added simpleqml project demonstrating QML in ActiveQt Added a new ActiveQt example application. The application demonstrates the use of QML inside an ActiveQt control, running in-process. Change-Id: I47582cf7eda665ef70f8feccdb6ed1f9e126ab30 Reviewed-by: Fredrik Orderud Reviewed-by: Andy Shaw Reviewed-by: Friedemann Kleint --- examples/activeqt/activeqt.pro | 1 + examples/activeqt/simple/main.cpp | 2 +- examples/activeqt/simpleqml/main.cpp | 120 ++++++++++++++++++++++++++++++ examples/activeqt/simpleqml/main.qml | 68 +++++++++++++++++ examples/activeqt/simpleqml/simpleqml.def | 8 ++ examples/activeqt/simpleqml/simpleqml.ico | Bin 0 -> 766 bytes examples/activeqt/simpleqml/simpleqml.pro | 15 ++++ examples/activeqt/simpleqml/simpleqml.qrc | 5 ++ examples/activeqt/simpleqml/simpleqml.rc | 2 + 9 files changed, 220 insertions(+), 1 deletion(-) create mode 100644 examples/activeqt/simpleqml/main.cpp create mode 100644 examples/activeqt/simpleqml/main.qml create mode 100644 examples/activeqt/simpleqml/simpleqml.def create mode 100644 examples/activeqt/simpleqml/simpleqml.ico create mode 100644 examples/activeqt/simpleqml/simpleqml.pro create mode 100644 examples/activeqt/simpleqml/simpleqml.qrc create mode 100644 examples/activeqt/simpleqml/simpleqml.rc (limited to 'examples') diff --git a/examples/activeqt/activeqt.pro b/examples/activeqt/activeqt.pro index dcfdb81..97b22bd 100644 --- a/examples/activeqt/activeqt.pro +++ b/examples/activeqt/activeqt.pro @@ -8,6 +8,7 @@ SUBDIRS += comapp \ contains(QT_CONFIG, shared):SUBDIRS += webbrowser contains(QT_CONFIG, opengl):!contains(QT_CONFIG, opengles2): SUBDIRS += opengl +qtHaveModule(quickcontrols2):SUBDIRS += simpleqml # For now only the contain examples with mingw, for the others you need # an IDL compiler diff --git a/examples/activeqt/simple/main.cpp b/examples/activeqt/simple/main.cpp index 49d7b2a..4e855b3 100644 --- a/examples/activeqt/simple/main.cpp +++ b/examples/activeqt/simple/main.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2015 The Qt Company Ltd. +** Copyright (C) 2016 The Qt Company Ltd. ** Contact: http://www.qt.io/licensing/ ** ** This file is part of the examples of the Qt Toolkit. diff --git a/examples/activeqt/simpleqml/main.cpp b/examples/activeqt/simpleqml/main.cpp new file mode 100644 index 0000000..8983b22 --- /dev/null +++ b/examples/activeqt/simpleqml/main.cpp @@ -0,0 +1,120 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include +#include +#include + +class Controller : public QObject +{ + Q_OBJECT + Q_PROPERTY(qreal value READ value WRITE setValue NOTIFY valueChanged) + Q_PROPERTY(QColor color READ color NOTIFY valueChanged) +public: + explicit Controller(QWidget *parent = 0) : + QObject(parent), + m_value(0) + { } + + qreal value() const { return m_value; } + + void setValue(qreal value) + { + if (value < 0) value = 0; + if (value > 1) value = 1; + + m_value = value; + valueChanged(); + } + + QColor color() const + { + QColor start = Qt::yellow; + QColor end = Qt::magenta; + + // Linear interpolation between two colors in HSV space + return QColor::fromHsvF( + start.hueF() * (1.0f - m_value) + end.hueF() * m_value, + start.saturationF() * (1.0f - m_value) + end.saturationF() * m_value, + start.valueF() * (1.0f - m_value) + end.valueF() * m_value, + start.alphaF() * (1.0f - m_value) + end.alphaF() * m_value + ); + } + +signals: + void valueChanged(); + +private: + qreal m_value; +}; + +class QSimpleQmlAx : public QMainWindow +{ + Q_OBJECT + Q_CLASSINFO("ClassID", "{50477337-58FE-4898-8FFC-6F6199CEAE08}") + Q_CLASSINFO("InterfaceID", "{A5EC7D99-CEC9-4BD1-8336-ED15A579B185}") + Q_CLASSINFO("EventsID", "{5BBFBCFD-20FD-48A3-96C7-1F6649CD1F52}") +public: + explicit QSimpleQmlAx(QWidget *parent = 0) : + QMainWindow(parent) + { + auto ui = new QQuickWidget(this); + + // Register our type to qml + qmlRegisterType("app", 1, 0, "Controller"); + + // Initialize view + ui->rootContext()->setContextProperty("context", QVariant::fromValue(new Controller(this))); + ui->setMinimumSize(200, 200); + ui->setResizeMode(QQuickWidget::SizeRootObjectToView); + ui->setSource(QUrl("qrc:/main.qml")); + setCentralWidget(ui); + } +}; + +#include "main.moc" + +QAXFACTORY_BEGIN( + "{E544E321-EF8B-4CD4-91F6-DB55A59DBADB}", // type library ID + "{E37E3131-DEA2-44EB-97A2-01CDD09A5A4D}") // application ID + QAXCLASS(QSimpleQmlAx) +QAXFACTORY_END() diff --git a/examples/activeqt/simpleqml/main.qml b/examples/activeqt/simpleqml/main.qml new file mode 100644 index 0000000..cb75da2 --- /dev/null +++ b/examples/activeqt/simpleqml/main.qml @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.5 +import QtQuick.Controls 2.0 + +import app 1.0 + +Rectangle { + // Properties from context + property Controller controller: context + + color: controller.color + + Label { + id: idText + text: "Color slider" + anchors.top: parent.top + anchors.left: parent.left + color: "black" + font.pixelSize: 12 + } + + Slider { + value: controller.value + onVisualPositionChanged: controller.value = visualPosition + + anchors.top: idText.bottom + anchors.left: parent.left + } +} diff --git a/examples/activeqt/simpleqml/simpleqml.def b/examples/activeqt/simpleqml/simpleqml.def new file mode 100644 index 0000000..b6ede3c --- /dev/null +++ b/examples/activeqt/simpleqml/simpleqml.def @@ -0,0 +1,8 @@ +; simpleqml.def : Declares the module parameters. + +EXPORTS + DllCanUnloadNow PRIVATE + DllGetClassObject PRIVATE + DllRegisterServer PRIVATE + DllUnregisterServer PRIVATE + DumpIDL PRIVATE diff --git a/examples/activeqt/simpleqml/simpleqml.ico b/examples/activeqt/simpleqml/simpleqml.ico new file mode 100644 index 0000000..c80d36a Binary files /dev/null and b/examples/activeqt/simpleqml/simpleqml.ico differ diff --git a/examples/activeqt/simpleqml/simpleqml.pro b/examples/activeqt/simpleqml/simpleqml.pro new file mode 100644 index 0000000..9043e9d --- /dev/null +++ b/examples/activeqt/simpleqml/simpleqml.pro @@ -0,0 +1,15 @@ +include(../shared.pri) + +TEMPLATE = lib +TARGET = simpleqmlax + +QT += widgets axserver quick quickwidgets + +SOURCES = main.cpp +RC_FILE = simpleqml.rc +DEF_FILE = simpleqml.def +RESOURCES = simpleqml.qrc + +# install +target.path = $$[QT_INSTALL_EXAMPLES]/activeqt/simpleqml +INSTALLS += target diff --git a/examples/activeqt/simpleqml/simpleqml.qrc b/examples/activeqt/simpleqml/simpleqml.qrc new file mode 100644 index 0000000..5f6483a --- /dev/null +++ b/examples/activeqt/simpleqml/simpleqml.qrc @@ -0,0 +1,5 @@ + + + main.qml + + diff --git a/examples/activeqt/simpleqml/simpleqml.rc b/examples/activeqt/simpleqml/simpleqml.rc new file mode 100644 index 0000000..7a6d549 --- /dev/null +++ b/examples/activeqt/simpleqml/simpleqml.rc @@ -0,0 +1,2 @@ +1 TYPELIB "simpleqml.rc" +1 ICON DISCARDABLE "simpleqml.ico" -- cgit v1.2.1