mirror of https://github.com/qt/qt3d.git
Add a QQuickWidget-based Scene3D example
Shares the QML files with the scene3d example. Task-number: QTBUG-52132 Change-Id: I076284b66a8dfdc3308171f11528851a7e20bbce Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
This commit is contained in:
parent
22e6942d5a
commit
dd20abe1d1
|
|
@ -29,7 +29,10 @@ qtHaveModule(multimedia): SUBDIRS += audio-visualizer-qml
|
|||
# TODO Port the old examples to new APIs
|
||||
#SUBDIRS += qt3d
|
||||
|
||||
qtHaveModule(widgets): SUBDIRS += basicshapes-cpp
|
||||
qtHaveModule(widgets) {
|
||||
SUBDIRS += basicshapes-cpp
|
||||
qtHaveModule(quickwidgets): SUBDIRS += widgets-scene3d
|
||||
}
|
||||
|
||||
EXAMPLE_FILES += \
|
||||
exampleresources
|
||||
|
|
|
|||
Binary file not shown.
|
After Width: | Height: | Size: 18 KiB |
|
|
@ -0,0 +1,56 @@
|
|||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2016 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the documentation of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:FDL$
|
||||
** 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 Free Documentation License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Free
|
||||
** Documentation License version 1.3 as published by the Free Software
|
||||
** Foundation and appearing in the file included in the packaging of
|
||||
** this file. Please review the following information to ensure
|
||||
** the GNU Free Documentation License version 1.3 requirements
|
||||
** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
/*!
|
||||
\example widgets-scene3d
|
||||
\title Qt 3D: Scene3D QML with Widgets Example
|
||||
\ingroup qt3d-examples-qml
|
||||
\brief A QWidget-based application with a QML scene containing a 3D scene.
|
||||
|
||||
\image widgets-scene3d.png
|
||||
|
||||
\e {widgets-scene3D} demonstrates visualizing a 3D scene from a
|
||||
QWidget-based application using QQuickWidget.
|
||||
|
||||
The actual 3D scene is the same as in the \e {scene3d} example.
|
||||
|
||||
This approach is different from the one based on
|
||||
QWidget::createWindowContainer() demonstrated in \e {basicshapes-cpp}
|
||||
because it does not create a native window for the Qt 3D content. Rather,
|
||||
it uses QQuickWidget, a genuine QWidget subclass to compose the Qt Quick
|
||||
and Qt 3D content together with the traditional widgets.
|
||||
|
||||
\note Be aware of the performance implications. While this approach is very
|
||||
flexible in the sense that it allows mixing QML and Qt 3D with widgets
|
||||
without clipping or stacking issues, using Scene3D in a QQuickWidget
|
||||
involves rendering to offscreen render targets (via framebuffer objects)
|
||||
twice. This is not always desirable for more complex scenes. For those the
|
||||
native window based approach shown in \e {basicshapes-cpp} will likely be a
|
||||
better choice.
|
||||
|
||||
\include examples-run.qdocinc
|
||||
*/
|
||||
|
|
@ -0,0 +1,76 @@
|
|||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2017 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 <QApplication>
|
||||
#include <QMainWindow>
|
||||
#include <QQuickWidget>
|
||||
#include <QMdiArea>
|
||||
#include <QLcdNumber>
|
||||
#include <QMenuBar>
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
QApplication app(argc, argv);
|
||||
|
||||
QMainWindow mainWindow;
|
||||
|
||||
QMdiArea *centralWidget = new QMdiArea;
|
||||
|
||||
QLCDNumber *lcd = new QLCDNumber;
|
||||
lcd->display(1337);
|
||||
lcd->setMinimumSize(250, 100);
|
||||
centralWidget->addSubWindow(lcd);
|
||||
|
||||
QQuickWidget *quickWidget = new QQuickWidget;
|
||||
quickWidget->setMinimumSize(300, 300);
|
||||
quickWidget->setResizeMode(QQuickWidget::SizeRootObjectToView);
|
||||
quickWidget->setSource(QUrl("qrc:/main.qml"));
|
||||
centralWidget->addSubWindow(quickWidget);
|
||||
|
||||
mainWindow.setCentralWidget(centralWidget);
|
||||
|
||||
QMenu *fileMenu = mainWindow.menuBar()->addMenu(QObject::tr("&File"));
|
||||
fileMenu->addAction(QObject::tr("E&xit"), qApp, &QCoreApplication::quit);
|
||||
|
||||
mainWindow.resize(800, 600);
|
||||
mainWindow.show();
|
||||
|
||||
return app.exec();
|
||||
}
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
!include( ../examples.pri ) {
|
||||
error( "Couldn't find the examples.pri file!" )
|
||||
}
|
||||
|
||||
QT += widgets qml quick quickwidgets 3dinput
|
||||
|
||||
SOURCES += \
|
||||
main.cpp
|
||||
|
||||
OTHER_FILES += \
|
||||
../scene3d/AnimatedEntity.qml \
|
||||
../scene3d/main.qml
|
||||
|
||||
RESOURCES += \
|
||||
widgets-scene3d.qrc
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
<RCC>
|
||||
<qresource prefix="/">
|
||||
<file alias="AnimatedEntity.qml">../scene3d/AnimatedEntity.qml</file>
|
||||
<file alias="main.qml">../scene3d/main.qml</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
Loading…
Reference in New Issue