Source

Target

Commits (10)
Showing with 720 additions and 21 deletions
......@@ -46,8 +46,7 @@ Item {
Scene3D {
id: scene3D
width: Math.min(parent.width, parent.height) - 100
height: width
anchors.fill: parent
anchors.verticalCenter: parent.verticalCenter
focus: true
aspects: "input"
......@@ -59,8 +58,8 @@ Item {
ColumnLayout {
id: colorLayout
anchors.left: scene3D.right
anchors.leftMargin: 5
anchors.left: parent.horizontalCenter
anchors.leftMargin: parent.width * 0.25
anchors.right: parent.right
anchors.rightMargin: 15
anchors.top: scene3D.top
......@@ -110,10 +109,9 @@ Item {
ColumnLayout {
id: transformLayout
anchors.left: scene3D.right
anchors.leftMargin: 5
anchors.right: parent.right
anchors.rightMargin: 15
anchors.left: colorLayout.left
anchors.right: colorLayout.right
anchors.top: colorLayout.bottom
anchors.topMargin: 10
spacing: 5
......@@ -158,10 +156,9 @@ Item {
ColumnLayout {
id: cameraLayout
anchors.left: scene3D.right
anchors.leftMargin: 5
anchors.right: parent.right
anchors.rightMargin: 15
anchors.left: colorLayout.left
anchors.right: colorLayout.right
anchors.top: transformLayout.bottom
anchors.topMargin: 10
spacing: 5
......
......@@ -2,7 +2,7 @@
error( "Couldn't find the examples.pri file!" )
}
QT += 3dcore 3drenderer 3dquick qml quick
QT += 3dcore 3drenderer 3dquick 3dinput qml quick
SOURCES += \
main.cpp
......
......@@ -37,6 +37,7 @@
#include <window.h>
#include <Qt3DRenderer/QRenderAspect>
#include <Qt3DQuick/QQmlAspectEngine>
#include <Qt3DInput/QInputAspect>
#include <QGuiApplication>
#include <QtQml>
......@@ -49,6 +50,7 @@ int main(int argc, char* argv[])
Qt3D::Quick::QQmlAspectEngine engine;
engine.aspectEngine()->registerAspect(new Qt3D::QRenderAspect());
engine.aspectEngine()->registerAspect(new Qt3D::QInputAspect());
// Expose the window as a context property so we can set the aspect ratio
engine.qmlEngine()->rootContext()->setContextProperty("_window", &view);
......
......@@ -32,7 +32,9 @@ SUBDIRS += \
simple-shaders-qml \
planets-qml \
plasma \
gooch-qml
gooch-qml \
transparency-qml \
transparency-qml-scene3d
# TODO Port the old examples to new APIs
#SUBDIRS += qt3d
......
/****************************************************************************
**
** Copyright (C) 2015 Klaralvdalens Datakonsult AB (KDAB).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the Qt3D module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL3$
** 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 http://www.qt.io/terms-conditions. For further
** information use the contact form at http://www.qt.io/contact-us.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 3 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPLv3 included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 3 requirements
** will be met: https://www.gnu.org/licenses/lgpl.html.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 2.0 or later as published by the Free
** Software Foundation and appearing in the file LICENSE.GPL included in
** the packaging of this file. Please review the following information to
** ensure the GNU General Public License version 2.0 requirements will be
** met: http://www.gnu.org/licenses/gpl-2.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/
import Qt3D 2.0
import Qt3D.Renderer 2.0
import QtQuick 2.2 as QQ2
Entity {
id: sceneRoot
Camera {
id: camera
projectionType: CameraLens.PerspectiveProjection
fieldOfView: 45
aspectRatio: 800/600
nearPlane : 0.1
farPlane : 1000.0
position: Qt.vector3d( 0.0, 0.0, 40.0 )
upVector: Qt.vector3d( 0.0, 1.0, 0.0 )
viewCenter: Qt.vector3d( 0.0, 0.0, 0.0 )
}
Configuration { controlledCamera: camera }
components: FrameGraph { ForwardRenderer{ camera: camera; clearColor: Qt.rgba(0.0, 0.5, 1, 1) } }
TorusMesh {
id: torusMesh
radius: 5
minorRadius: 1
rings: 100
slices: 20
}
SphereMesh {
id: sphereMesh
radius: 3
}
Transform {
id: sphereTransform
Translate { dx: 10 }
}
Transform {
id: cylinderTransform
Translate { dx: -10 }
}
Entity {
id: torusEntity
components: [ torusMesh, phongMaterial ]
}
Entity {
id: sphereEntity
components: [ sphereMesh, alphaMaterial, sphereTransform ]
}
Entity {
id: cylinderEntity
components: [ sphereMesh, alphaMaterial, cylinderTransform ]
}
Material {
id: alphaMaterial
property real alpha: 0.5
QQ2.NumberAnimation {
duration: 2000
loops: QQ2.Animation.Infinite
target: alphaMaterial
property: "alpha"
from: 0.0
to: 1.0
running: true
}
effect: Effect {
parameters: [
Parameter { name: "alpha"; value: alphaMaterial.alpha },
Parameter { name: "ka"; value: "black" },
Parameter { name: "kd"; value: "blue" },
Parameter { name: "ks"; value: "white" },
Parameter { name: "shininess"; value: 75.0 },
Parameter { name: "lightPosition"; value: Qt.vector4d(1.0, 1.0, 0.0, 1.0) },
Parameter { name: "lightIntensity"; value: Qt.vector3d(1.0, 1.0, 1.0) }
]
ShaderProgram {
id: alphaPhong
vertexShaderCode: loadSource("qrc:/phongalpha.vert")
fragmentShaderCode: loadSource("qrc:/phongalpha.frag")
}
techniques: [
Technique
{
openGLFilter {
api: OpenGLFilter.Desktop
profile: OpenGLFilter.None
majorVersion: 2
minorVersion: 0
}
renderPasses: RenderPass {
renderStates: [
CullFace { mode : CullFace.Back },
DepthTest { func: DepthTest.Less },
DepthMask { mask: false },
BlendState {
srcRGB: BlendState.SrcAlpha
dstRGB: BlendState.OneMinusSrcAlpha
}
,BlendEquation {mode: BlendEquation.FuncAdd}
]
shaderProgram: alphaPhong
}
},
Technique
{
openGLFilter {
api: OpenGLFilter.ES
profile: OpenGLFilter.None
majorVersion: 2
minorVersion: 0
}
renderPasses: RenderPass {
renderStates: [
CullFace { mode : CullFace.Back },
DepthTest { func: DepthTest.Less },
DepthMask { mask: false },
BlendState {
srcRGB: BlendState.SrcAlpha
dstRGB: BlendState.OneMinusSrcAlpha
}
,BlendEquation {mode: BlendEquation.FuncAdd}
]
shaderProgram: alphaPhong
}
}
]
}
}
PhongMaterial {
id: phongMaterial
}
}
/****************************************************************************
**
** Copyright (C) 2015 Klaralvdalens Datakonsult AB (KDAB).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the Qt3D module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL3$
** 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 http://www.qt.io/terms-conditions. For further
** information use the contact form at http://www.qt.io/contact-us.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 3 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPLv3 included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 3 requirements
** will be met: https://www.gnu.org/licenses/lgpl.html.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 2.0 or later as published by the Free
** Software Foundation and appearing in the file LICENSE.GPL included in
** the packaging of this file. Please review the following information to
** ensure the GNU General Public License version 2.0 requirements will be
** met: http://www.gnu.org/licenses/gpl-2.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/
#include <QGuiApplication>
#include <QQmlApplicationEngine>
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
return app.exec();
}
/****************************************************************************
**
** Copyright (C) 2015 Klaralvdalens Datakonsult AB (KDAB).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the Qt3D module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL3$
** 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 http://www.qt.io/terms-conditions. For further
** information use the contact form at http://www.qt.io/contact-us.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 3 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPLv3 included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 3 requirements
** will be met: https://www.gnu.org/licenses/lgpl.html.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 2.0 or later as published by the Free
** Software Foundation and appearing in the file LICENSE.GPL included in
** the packaging of this file. Please review the following information to
** ensure the GNU General Public License version 2.0 requirements will be
** met: http://www.gnu.org/licenses/gpl-2.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/
import QtQuick 2.4
import QtQuick.Window 2.2
import QtQuick.Scene3D 2.0
Window
{
visible: true
width: 800
height: 600
Scene3D {
id: scene3D
anchors.fill: parent
focus: true
aspects: "input"
Scene {}
}
}
#define FP highp
uniform FP vec4 lightPosition;
uniform FP vec3 lightIntensity;
// TODO: Replace with a struct
uniform FP vec3 ka; // Ambient reflectivity
uniform FP vec3 kd; // Diffuse reflectivity
uniform FP vec3 ks; // Specular reflectivity
uniform FP float shininess; // Specular shininess factor
uniform float alpha;
varying FP vec3 position;
varying FP vec3 normal;
FP vec3 adsModel( const FP vec3 pos, const FP vec3 n )
{
// Calculate the vector from the light to the fragment
FP vec3 s = normalize( vec3( lightPosition ) - pos );
// Calculate the vector from the fragment to the eye position
// (origin since this is in "eye" or "camera" space)
FP vec3 v = normalize( -pos );
// Reflect the light beam using the normal at this fragment
FP vec3 r = reflect( -s, n );
// Calculate the diffuse component
FP float diffuse = max( dot( s, n ), 0.0 );
// Calculate the specular component
FP float specular = 0.0;
if ( dot( s, n ) > 0.0 )
specular = pow( max( dot( r, v ), 0.0 ), shininess );
// Combine the ambient, diffuse and specular contributions
return lightIntensity * ( ka + kd * diffuse + ks * specular );
}
void main()
{
gl_FragColor = vec4( adsModel( position, normalize( normal ) ), alpha );
}
attribute vec3 vertexPosition;
attribute vec3 vertexNormal;
varying vec3 position;
varying vec3 normal;
uniform mat4 modelView;
uniform mat3 modelViewNormal;
uniform mat4 mvp;
void main()
{
normal = normalize( modelViewNormal * vertexNormal );
position = vec3( modelView * vec4( vertexPosition, 1.0 ) );
gl_Position = mvp * vec4( vertexPosition, 1.0 );
}
!include( ../examples.pri ) {
error( "Couldn't find the examples.pri file!" )
}
QT += qml quick 3dcore 3drenderer 3dinput 3dquick
SOURCES += main.cpp
RESOURCES += transparency-qml-scene3d.qrc
<RCC>
<qresource prefix="/">
<file>main.qml</file>
<file>Scene.qml</file>
<file>phongalpha.vert</file>
<file>phongalpha.frag</file>
</qresource>
</RCC>
/****************************************************************************
**
** Copyright (C) 2015 Klaralvdalens Datakonsult AB (KDAB).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the Qt3D module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL3$
** 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 http://www.qt.io/terms-conditions. For further
** information use the contact form at http://www.qt.io/contact-us.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 3 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPLv3 included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 3 requirements
** will be met: https://www.gnu.org/licenses/lgpl.html.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 2.0 or later as published by the Free
** Software Foundation and appearing in the file LICENSE.GPL included in
** the packaging of this file. Please review the following information to
** ensure the GNU General Public License version 2.0 requirements will be
** met: http://www.gnu.org/licenses/gpl-2.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/
#include <window.h>
#include <Qt3DRenderer/QRenderAspect>
#include <Qt3DInput/QInputAspect>
#include <Qt3DQuick/QQmlAspectEngine>
#include <QGuiApplication>
int main(int argc, char* argv[])
{
QGuiApplication app(argc, argv);
Window view;
Qt3D::Quick::QQmlAspectEngine engine;
engine.aspectEngine()->registerAspect(new Qt3D::QRenderAspect());
engine.aspectEngine()->registerAspect(new Qt3D::QInputAspect());
engine.aspectEngine()->initialize();
QVariantMap data;
data.insert(QStringLiteral("surface"), QVariant::fromValue(static_cast<QSurface *>(&view)));
data.insert(QStringLiteral("eventSource"), QVariant::fromValue(&view));
engine.aspectEngine()->setData(data);
engine.setSource(QUrl("qrc:/main.qml"));
view.show();
return app.exec();
}
/****************************************************************************
**
** Copyright (C) 2015 Klaralvdalens Datakonsult AB (KDAB).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the Qt3D module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL3$
** 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 http://www.qt.io/terms-conditions. For further
** information use the contact form at http://www.qt.io/contact-us.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 3 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPLv3 included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 3 requirements
** will be met: https://www.gnu.org/licenses/lgpl.html.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 2.0 or later as published by the Free
** Software Foundation and appearing in the file LICENSE.GPL included in
** the packaging of this file. Please review the following information to
** ensure the GNU General Public License version 2.0 requirements will be
** met: http://www.gnu.org/licenses/gpl-2.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/
import Qt3D 2.0
import Qt3D.Renderer 2.0
import QtQuick 2.4 as QQ2
Entity {
id: sceneRoot
Camera {
id: camera
projectionType: CameraLens.PerspectiveProjection
fieldOfView: 45
aspectRatio: 800/600
nearPlane : 0.1
farPlane : 1000.0
position: Qt.vector3d( 0.0, 0.0, 40.0 )
upVector: Qt.vector3d( 0.0, 1.0, 0.0 )
viewCenter: Qt.vector3d( 0.0, 0.0, 0.0 )
}
Configuration { controlledCamera: camera }
components: FrameGraph { activeFrameGraph: ForwardRenderer{ camera: camera ; clearColor: Qt.rgba(0.0, 0.5, 1, 1) } }
TorusMesh {
id: torusMesh
radius: 5
minorRadius: 1
rings: 100
slices: 20
}
SphereMesh {
id: sphereMesh
radius: 3
}
Transform {
id: sphereTransform
Translate { dx: 10 }
}
Transform {
id: cylinderTransform
Translate { dx: -10 }
}
Entity {
id: torusEntity
components: [ torusMesh, phongMaterial ]
}
Entity {
id: sphereEntity
components: [ sphereMesh, alphaMaterial, sphereTransform ]
}
Entity {
id: cylinderEntity
components: [ sphereMesh, alphaMaterial, cylinderTransform ]
}
Material
{
id: alphaMaterial
property real alpha: 0.5
QQ2.NumberAnimation {
duration: 2000
loops: QQ2.Animation.Infinite
target: alphaMaterial
property: "alpha"
from: 0.0
to: 1.0
running: true
}
effect: Effect {
parameters: [
Parameter { name: "alpha"; value: alphaMaterial.alpha },
Parameter { name: "ka"; value: "black" },
Parameter { name: "kd"; value: "blue" },
Parameter { name: "ks"; value: "white" },
Parameter { name: "shininess"; value: 75.0 },
Parameter { name: "lightPosition"; value: Qt.vector4d(1.0, 1.0, 0.0, 1.0) },
Parameter { name: "lightIntensity"; value: Qt.vector3d(1.0, 1.0, 1.0) }
]
ShaderProgram {
id: alphaPhong
vertexShaderCode: loadSource("qrc:/phongalpha.vert")
fragmentShaderCode: loadSource("qrc:/phongalpha.frag")
}
techniques: [
Technique
{
openGLFilter {
api: OpenGLFilter.Desktop
profile: OpenGLFilter.None
majorVersion: 2
minorVersion: 0
}
renderPasses: RenderPass {
renderStates: [
CullFace { mode : CullFace.Back },
DepthTest { func: DepthTest.Less },
DepthMask { mask: false },
BlendState {
srcRGB: BlendState.SrcAlpha
dstRGB: BlendState.OneMinusSrcAlpha
}
,BlendEquation {mode: BlendEquation.FuncAdd}
]
shaderProgram: alphaPhong
}
},
Technique
{
openGLFilter {
api: OpenGLFilter.ES
profile: OpenGLFilter.None
majorVersion: 2
minorVersion: 0
}
renderPasses: RenderPass {
renderStates: [
CullFace { mode : CullFace.Back },
DepthTest { func: DepthTest.Less },
DepthMask { mask: false },
BlendState {
srcRGB: BlendState.SrcAlpha
dstRGB: BlendState.OneMinusSrcAlpha
}
,BlendEquation {mode: BlendEquation.FuncAdd}
]
shaderProgram: alphaPhong
}
}
]
}
}
PhongMaterial {
id: phongMaterial
}
}
#define FP highp
uniform FP vec4 lightPosition;
uniform FP vec3 lightIntensity;
// TODO: Replace with a struct
uniform FP vec3 ka; // Ambient reflectivity
uniform FP vec3 kd; // Diffuse reflectivity
uniform FP vec3 ks; // Specular reflectivity
uniform FP float shininess; // Specular shininess factor
uniform float alpha;
varying FP vec3 position;
varying FP vec3 normal;
FP vec3 adsModel( const FP vec3 pos, const FP vec3 n )
{
// Calculate the vector from the light to the fragment
FP vec3 s = normalize( vec3( lightPosition ) - pos );
// Calculate the vector from the fragment to the eye position
// (origin since this is in "eye" or "camera" space)
FP vec3 v = normalize( -pos );
// Reflect the light beam using the normal at this fragment
FP vec3 r = reflect( -s, n );
// Calculate the diffuse component
FP float diffuse = max( dot( s, n ), 0.0 );
// Calculate the specular component
FP float specular = 0.0;
if ( dot( s, n ) > 0.0 )
specular = pow( max( dot( r, v ), 0.0 ), shininess );
// Combine the ambient, diffuse and specular contributions
return lightIntensity * ( ka + kd * diffuse + ks * specular );
}
void main()
{
gl_FragColor = vec4( adsModel( position, normalize( normal ) ), alpha );
}
attribute vec3 vertexPosition;
attribute vec3 vertexNormal;
varying vec3 position;
varying vec3 normal;
uniform mat4 modelView;
uniform mat3 modelViewNormal;
uniform mat4 mvp;
void main()
{
normal = normalize( modelViewNormal * vertexNormal );
position = vec3( modelView * vec4( vertexPosition, 1.0 ) );
gl_Position = mvp * vec4( vertexPosition, 1.0 );
}
!include( ../examples.pri ) {
error( "Couldn't find the examples.pri file!" )
}
QT += qml quick 3dcore 3drenderer 3dinput 3dquick
SOURCES += main.cpp
RESOURCES += transparency-qml.qrc
<RCC>
<qresource prefix="/">
<file>main.qml</file>
<file>phongalpha.vert</file>
<file>phongalpha.frag</file>
</qresource>
</RCC>
......@@ -70,6 +70,7 @@ QAspectEnginePrivate::QAspectEnginePrivate()
qRegisterMetaType<Qt3D::QObserverInterface *>();
qRegisterMetaType<Qt3D::QEntity *>();
qRegisterMetaType<Qt3D::QScene *>();
qRegisterMetaType<Qt3D::QAbstractPostman *>();
}
/*!
......@@ -143,10 +144,10 @@ void QAspectEngine::initialize()
QChangeArbiter::createUnmanagedThreadLocalChangeQueue(arbiter);
QMetaObject::invokeMethod(arbiter,
"setPostman",
Q_ARG(Qt3D::QObserverInterface *, d->m_postman));
Q_ARG(Qt3D::QAbstractPostman*, d->m_postman));
QMetaObject::invokeMethod(arbiter,
"setScene",
Q_ARG(Qt3D::QScene *, d->m_scene));
Q_ARG(Qt3D::QScene*, d->m_scene));
}
void QAspectEngine::shutdown()
......
......@@ -41,6 +41,7 @@
#include <Qt3DCore/qscenepropertychange.h>
#include <Qt3DCore/qaspectengine.h>
#include <Qt3DCore/private/qscene_p.h>
#include <Qt3DCore/private/qpostman_p.h>
#include <QEvent>
#include <QChildEvent>
#include <QMetaObject>
......@@ -262,7 +263,7 @@ void QNodePrivate::setArbiter(QLockableObserverInterface *arbiter)
{
if (m_changeArbiter && m_changeArbiter != arbiter)
unregisterNotifiedProperties();
m_changeArbiter = arbiter;
m_changeArbiter = static_cast<QAbstractArbiter *>(arbiter);
if (m_changeArbiter)
registerNotifiedProperties();
}
......@@ -324,8 +325,11 @@ void QNodePrivate::notifyObservers(const QSceneChangePtr &change)
if (m_blockNotifications && change->type() == NodeUpdated)
return;
if (m_changeArbiter != Q_NULLPTR)
m_changeArbiter->sceneChangeEventWithLock(change);
if (m_changeArbiter != Q_NULLPTR) {
QAbstractPostman *postman = m_changeArbiter->postman();
if (postman != Q_NULLPTR)
postman->notifyBackend(change);
}
}
// Inserts this tree into the main Scene tree.
......@@ -451,8 +455,10 @@ QNode::QNode(QNodePrivate &dd, QNode *parent)
*/
void QNode::copy(const QNode *ref)
{
if (ref)
if (ref) {
d_func()->m_id = ref->d_func()->m_id;
setObjectName(ref->objectName());
}
}
QNode::~QNode()
......
......@@ -70,7 +70,7 @@ public:
// For now this just protects access to the m_changeArbiter.
// Later on we may decide to extend support for multiple observers.
QLockableObserverInterface *m_changeArbiter;
QAbstractArbiter *m_changeArbiter;
QScene *m_scene;
mutable QNodeId m_id;
bool m_blockNotifications;
......