aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/auto/cmake/CMakeLists.txt21
-rw-r--r--tests/auto/cmake/test_qml_app_deployment/CMakeLists.txt87
-rw-r--r--tests/auto/cmake/test_qml_app_deployment/Shapes/EllipseShape/CMakeLists.txt10
-rw-r--r--tests/auto/cmake/test_qml_app_deployment/Shapes/EllipseShape/ellipseitem.cpp49
-rw-r--r--tests/auto/cmake/test_qml_app_deployment/Shapes/EllipseShape/ellipseitem.h45
-rw-r--r--tests/auto/cmake/test_qml_app_deployment/Shapes/FunkyShape/CMakeLists.txt10
-rw-r--r--tests/auto/cmake/test_qml_app_deployment/Shapes/FunkyShape/FunkyItemQml.qml76
-rw-r--r--tests/auto/cmake/test_qml_app_deployment/Shapes/FunkyShape/funkyitem.cpp49
-rw-r--r--tests/auto/cmake/test_qml_app_deployment/Shapes/FunkyShape/funkyitem.h45
-rw-r--r--tests/auto/cmake/test_qml_app_deployment/main.cpp56
-rw-r--r--tests/auto/cmake/test_qml_app_deployment/main.qml70
11 files changed, 518 insertions, 0 deletions
diff --git a/tests/auto/cmake/CMakeLists.txt b/tests/auto/cmake/CMakeLists.txt
index 4ea17fb0eb..1dc26bbde9 100644
--- a/tests/auto/cmake/CMakeLists.txt
+++ b/tests/auto/cmake/CMakeLists.txt
@@ -86,4 +86,25 @@ if(TARGET Qt::Quick)
)
endif()
endif()
+
+ set(deploy_args
+ test_qml_app_deployment
+ BINARY "${CMAKE_CTEST_COMMAND}"
+ BINARY_ARGS "-V"
+ # Need to explicitly specify a writable install prefix.
+ BUILD_OPTIONS
+ -DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/test_qml_app_deployment_installed
+ )
+
+ # For now, the test should only pass on Windows and macOS shared and static builds and fail on
+ # other platforms, because there is no support for runtime dependency deployment
+ # on those platforms.
+ # With static builds the runtime dependencies are just skipped, but the test should
+ # still pass.
+ if((WIN32 OR (APPLE AND NOT IOS)))
+ _qt_internal_test_expect_pass(${deploy_args})
+ else()
+ _qt_internal_test_expect_fail(${deploy_args})
+ endif()
endif()
+
diff --git a/tests/auto/cmake/test_qml_app_deployment/CMakeLists.txt b/tests/auto/cmake/test_qml_app_deployment/CMakeLists.txt
new file mode 100644
index 0000000000..908ac87fa9
--- /dev/null
+++ b/tests/auto/cmake/test_qml_app_deployment/CMakeLists.txt
@@ -0,0 +1,87 @@
+cmake_minimum_required(VERSION 3.16)
+project(deployment_api)
+enable_testing()
+
+find_package(Qt6 COMPONENTS REQUIRED Quick Test QuickTestUtilsPrivate)
+
+qt6_standard_project_setup()
+
+function(create_test_executable target)
+ cmake_parse_arguments(arg "" "" "" ${ARGN})
+
+ qt_add_executable(${target} main.cpp)
+ qt_add_qml_module(${target}
+ URI EntryModule
+ VERSION 1.0
+ QML_FILES main.qml
+ NO_RESOURCE_TARGET_PATH
+ )
+
+ set_target_properties(${target} PROPERTIES
+ # We explicitly don't set WIN32_EXECUTABLE to ensure we see errors from stderr when
+ # something fails and not having to use DebugView.
+
+ MACOSX_BUNDLE TRUE
+ )
+ target_link_libraries(${target} PRIVATE
+ Qt::Quick
+ Qt::Test
+ Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
+ )
+
+ install(TARGETS ${target}
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ )
+
+ # Need to manually install the backing libraries on Windows because windeployqt does not do it.
+ # On macOS, macdeployqt takes care of installing the backing library because it is detected
+ # as a dependency of the qml plugin, which is specified via the -executable option
+ # of macdeployqt.
+ # Note we install all the binaries and backing libraries before calling the deploy tool.
+ if(WIN32)
+ install(TARGETS EllipseShape FunkyShape
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ )
+ endif()
+
+ qt_generate_deploy_qml_app_script(
+ TARGET ${target}
+ FILENAME_VARIABLE deploy_script
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ # Just to ensure that running the test from the build dir also works
+ MACOS_BUNDLE_POST_BUILD
+ )
+ install(SCRIPT ${deploy_script})
+
+ if(APPLE AND NOT IOS)
+ set(installed_app_location "${CMAKE_INSTALL_PREFIX}/${target}.app/Contents/MacOS/${target}")
+ elseif(WIN32)
+ set(installed_app_location "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}/${target}.exe")
+ endif()
+
+ # There's no nice way to get the location of an installed binary, so we need to construct
+ # the binary install path by hand, somewhat similar to how it's done in
+ # the implementation of qt_deploy_runtime_dependencies.
+ # On unsupported deployment platforms, either the install_ test will fail not finding
+ # the location of the app (because we do not set a installed_app_location value)
+ # or the run_deployed_ test will fail because we didn't deploy the runtime dependencies.
+ # When support for additional platforms is added, these locations will have to be augmented.
+ add_test(install_${target} "${CMAKE_COMMAND}" --install .)
+ set_tests_properties(install_${target} PROPERTIES FIXTURES_SETUP deploy_step)
+ add_test(NAME run_deployed_${target}
+ COMMAND "${installed_app_location}"
+ # Make sure that we don't use the default working directory which is
+ # CMAKE_CURRENT_BINARY_DIR because on Windows the loader might pick up dlls
+ # from the working directory instead of the installed app dir, if the dll is
+ # missing in the app dir.
+ WORKING_DIRECTORY "${CMAKE_INSTALL_PREFIX}")
+endfunction()
+
+# Create the backing targets before the app, so that the backing library
+# install commands don't error out.
+add_subdirectory(Shapes/FunkyShape)
+add_subdirectory(Shapes/EllipseShape)
+
+create_test_executable(UserQmlApp)
diff --git a/tests/auto/cmake/test_qml_app_deployment/Shapes/EllipseShape/CMakeLists.txt b/tests/auto/cmake/test_qml_app_deployment/Shapes/EllipseShape/CMakeLists.txt
new file mode 100644
index 0000000000..4d45d47d9d
--- /dev/null
+++ b/tests/auto/cmake/test_qml_app_deployment/Shapes/EllipseShape/CMakeLists.txt
@@ -0,0 +1,10 @@
+qt_add_qml_module(EllipseShape
+ URI Shapes.EllipseShape
+ VERSION 1.0
+ SOURCES ellipseitem.cpp ellipseitem.h
+)
+
+target_link_libraries(EllipseShape
+ PRIVATE
+ Qt::Quick
+)
diff --git a/tests/auto/cmake/test_qml_app_deployment/Shapes/EllipseShape/ellipseitem.cpp b/tests/auto/cmake/test_qml_app_deployment/Shapes/EllipseShape/ellipseitem.cpp
new file mode 100644
index 0000000000..8c82a50b88
--- /dev/null
+++ b/tests/auto/cmake/test_qml_app_deployment/Shapes/EllipseShape/ellipseitem.cpp
@@ -0,0 +1,49 @@
+/****************************************************************************
+**
+** Copyright (C) 2022 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "ellipseitem.h"
+
+#include <QPainter>
+
+EllipseItem::EllipseItem(QQuickItem *parent)
+ : QQuickPaintedItem(parent)
+{
+}
+
+EllipseItem::~EllipseItem()
+{
+}
+
+void EllipseItem::paint(QPainter *painter)
+{
+ const qreal halfPenWidth = qMax(painter->pen().width() / 2.0, 1.0);
+
+ QRectF rect = boundingRect();
+ rect.adjust(halfPenWidth, halfPenWidth, -halfPenWidth, -halfPenWidth);
+
+ painter->drawEllipse(rect);
+}
diff --git a/tests/auto/cmake/test_qml_app_deployment/Shapes/EllipseShape/ellipseitem.h b/tests/auto/cmake/test_qml_app_deployment/Shapes/EllipseShape/ellipseitem.h
new file mode 100644
index 0000000000..5c6c4309f6
--- /dev/null
+++ b/tests/auto/cmake/test_qml_app_deployment/Shapes/EllipseShape/ellipseitem.h
@@ -0,0 +1,45 @@
+/****************************************************************************
+**
+** Copyright (C) 2022 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef ELLIPSEITEM_H
+#define ELLIPSEITEM_H
+
+#include <QQuickPaintedItem>
+
+class EllipseItem : public QQuickPaintedItem
+{
+ Q_OBJECT
+ Q_DISABLE_COPY(EllipseItem)
+ QML_NAMED_ELEMENT(EllipseItemCpp)
+
+public:
+ EllipseItem(QQuickItem *parent = nullptr);
+ ~EllipseItem();
+ void paint(QPainter *painter);
+};
+
+#endif // ELLIPSEITEM_H
diff --git a/tests/auto/cmake/test_qml_app_deployment/Shapes/FunkyShape/CMakeLists.txt b/tests/auto/cmake/test_qml_app_deployment/Shapes/FunkyShape/CMakeLists.txt
new file mode 100644
index 0000000000..8eef18ed18
--- /dev/null
+++ b/tests/auto/cmake/test_qml_app_deployment/Shapes/FunkyShape/CMakeLists.txt
@@ -0,0 +1,10 @@
+qt_add_qml_module(FunkyShape
+ URI Shapes.FunkyShape
+ VERSION 1.0
+ QML_FILES FunkyItemQml.qml
+ SOURCES funkyitem.cpp funkyitem.h
+)
+target_link_libraries(FunkyShape
+ PRIVATE
+ Qt::Quick
+)
diff --git a/tests/auto/cmake/test_qml_app_deployment/Shapes/FunkyShape/FunkyItemQml.qml b/tests/auto/cmake/test_qml_app_deployment/Shapes/FunkyShape/FunkyItemQml.qml
new file mode 100644
index 0000000000..ce1a40f337
--- /dev/null
+++ b/tests/auto/cmake/test_qml_app_deployment/Shapes/FunkyShape/FunkyItemQml.qml
@@ -0,0 +1,76 @@
+/****************************************************************************
+**
+** Copyright (C) 2022 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, 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
+import QtQuick.Shapes
+
+Shape {
+ width: 200
+ height: 150
+ anchors.centerIn: parent
+ ShapePath {
+ strokeWidth: 4
+ strokeColor: "red"
+ fillGradient: LinearGradient {
+ x1: 20; y1: 20
+ x2: 180; y2: 130
+ GradientStop { position: 0; color: "blue" }
+ GradientStop { position: 0.2; color: "green" }
+ GradientStop { position: 0.4; color: "red" }
+ GradientStop { position: 0.6; color: "yellow" }
+ GradientStop { position: 1; color: "cyan" }
+ }
+ strokeStyle: ShapePath.DashLine
+ dashPattern: [ 1, 4 ]
+ startX: 20; startY: 20
+ PathLine { x: 180; y: 130 }
+ PathLine { x: 20; y: 130 }
+ PathLine { x: 20; y: 20 }
+ }
+}
diff --git a/tests/auto/cmake/test_qml_app_deployment/Shapes/FunkyShape/funkyitem.cpp b/tests/auto/cmake/test_qml_app_deployment/Shapes/FunkyShape/funkyitem.cpp
new file mode 100644
index 0000000000..983b613f88
--- /dev/null
+++ b/tests/auto/cmake/test_qml_app_deployment/Shapes/FunkyShape/funkyitem.cpp
@@ -0,0 +1,49 @@
+/****************************************************************************
+**
+** Copyright (C) 2022 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "funkyitem.h"
+
+#include <QPainter>
+
+FunkyItem::FunkyItem(QQuickItem *parent)
+ : QQuickPaintedItem(parent)
+{
+}
+
+FunkyItem::~FunkyItem()
+{
+}
+
+void FunkyItem::paint(QPainter *painter)
+{
+ const qreal halfPenWidth = qMax(painter->pen().width() / 2.0, 1.0);
+
+ QRectF rect = boundingRect();
+ rect.adjust(halfPenWidth, halfPenWidth, -halfPenWidth, -halfPenWidth);
+
+ painter->drawEllipse(rect);
+}
diff --git a/tests/auto/cmake/test_qml_app_deployment/Shapes/FunkyShape/funkyitem.h b/tests/auto/cmake/test_qml_app_deployment/Shapes/FunkyShape/funkyitem.h
new file mode 100644
index 0000000000..2287b28288
--- /dev/null
+++ b/tests/auto/cmake/test_qml_app_deployment/Shapes/FunkyShape/funkyitem.h
@@ -0,0 +1,45 @@
+/****************************************************************************
+**
+** Copyright (C) 2022 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef FunkyItem_H
+#define FunkyItem_H
+
+#include <QQuickPaintedItem>
+
+class FunkyItem : public QQuickPaintedItem
+{
+ Q_OBJECT
+ Q_DISABLE_COPY(FunkyItem)
+ QML_NAMED_ELEMENT(FunkyItemCpp)
+
+public:
+ FunkyItem(QQuickItem *parent = nullptr);
+ ~FunkyItem();
+ void paint(QPainter *painter);
+};
+
+#endif // FunkyItem_H
diff --git a/tests/auto/cmake/test_qml_app_deployment/main.cpp b/tests/auto/cmake/test_qml_app_deployment/main.cpp
new file mode 100644
index 0000000000..516cb7687b
--- /dev/null
+++ b/tests/auto/cmake/test_qml_app_deployment/main.cpp
@@ -0,0 +1,56 @@
+/****************************************************************************
+**
+** Copyright (C) 2022 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <QtQml/QQmlEngine>
+#include <QtQuick/QQuickView>
+#include <QtTest/QTest>
+
+#include <QtQuickTestUtils/private/viewtestutils_p.h>
+
+class test_qml_app_deployment : public QObject
+{
+ Q_OBJECT
+private slots:
+ void canRun();
+};
+
+
+void test_qml_app_deployment::canRun()
+{
+ QQuickView view;
+#ifdef QT_STATIC
+ // Need to add qrc:/// as an import path when using Qt static builds,
+ // to ensure that user module qmldir files are found from the embedded resources
+ // and not from the filesystem.
+ view.engine()->addImportPath(QLatin1String("qrc:///"));
+#endif
+ QVERIFY(QQuickTest::showView(view, QUrl("qrc:///main.qml")));
+}
+
+QTEST_MAIN(test_qml_app_deployment)
+
+#include "main.moc"
diff --git a/tests/auto/cmake/test_qml_app_deployment/main.qml b/tests/auto/cmake/test_qml_app_deployment/main.qml
new file mode 100644
index 0000000000..b0c38e87dd
--- /dev/null
+++ b/tests/auto/cmake/test_qml_app_deployment/main.qml
@@ -0,0 +1,70 @@
+/****************************************************************************
+**
+** Copyright (C) 2022 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, 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
+import Shapes.EllipseShape
+import Shapes.FunkyShape
+
+Item {
+ width: 640; height: 480
+ visible: true
+ Item {
+ anchors.fill: parent
+
+ EllipseItemCpp {
+ anchors.fill: parent
+ }
+ FunkyItemCpp {
+ anchors.fill: parent
+ }
+ FunkyItemQml {
+ anchors.fill: parent
+ }
+ }
+}