Я использую qt 5.5 в ubuntu 18.04, мне нужно отобразить 3D-модель (в формате obj), я использую qquickwidget и qml (Scene3D), он отлично работает для модели отображения, но при выходе из приложения произойдет сбой. сообщение об ошибке, которое я получаю из консоли qtcreator, как показано ниже:

QMutex::lock()                                         0x7ffff53b0725 
QSemaphore::acquire(int)                               0x7ffff53b23f4 
Qt3D::QAspectManager::quit()                           0x7fffc77c03bd 
Qt3D::QAspectEngine::shutdown()                        0x7fffc77be54a 
Qt3D::QAspectEngine::~QAspectEngine()                  0x7fffc77be94e 
Qt3D::QAspectEngine::~QAspectEngine()                  0x7fffc77be9d9 
??                                                     0x7fffc8036c27 
QMetaObject::activate(QObject *, int, int, void * *)   0x7ffff55d3cfa 
QObject::destroyed(QObject *)                          0x7ffff55d4a6f 
QObject::~QObject()                                    0x7ffff55dcdab 
QQuickWindow::~QQuickWindow()                          0x7ffff3d43931 
QQuickWindow::~QQuickWindow()                          0x7ffff3d43999 
??                                                     0x7ffff76bbb8a 
??                                                     0x7ffff76bbc99 
QObject::~QObject()                                    0x7ffff55dcb6b 
QWidget::~QWidget()                                    0x7ffff6fc600b 
QQuickWidget::~QQuickWidget()                          0x7ffff76bb119 
QObjectPrivate::deleteChildren()                       0x7ffff55d2bdc 
QWidget::~QWidget()                                    0x7ffff6fc5f8b

Похоже, это потому, что деструктор QQuickWindow был вызван дважды. Я попытался удалить связанное с 3d ядром в qml, просто нарисуйте простой 2d прямоугольник, он не будет разбит, помогает ли мне кто-нибудь решить эту проблему, большое спасибо. Ниже приведен мой файл qml; (1) main.qml

import QtQuick 2.0
import QtQuick.Scene3D 2.0
import QtQuick.Controls 1.4
import QtQuick.Layouts 1.2
import Qt3D 2.0

Item {
  id: main

 Camera {
    id: camera
}

Entity {
    components: [
        ShadowMapFrameGraph {
            id: framegraph
            viewCamera: camera
            lightCamera: light.lightCamera
        }
    ]
}

Light {
    id: light
}

AdsEffect {
    id: shadowMapEffect

    shadowTexture: framegraph.shadowTexture
    light: light
}


Scene3D {
    id: scene3D
    anchors.fill: parent
    anchors.verticalCenter: parent.verticalCenter
    focus: true
    aspects: "input"

    obj_model{
        id: model
    }
}
}

(2) obj_model.qml

import Qt3D 2.0
import Qt3D.Renderer 2.0
import QtQuick 2.1 as QQ2

Entity {
id: root
property Material material
Camera {
    id: camera
    projectionType: CameraLens.PerspectiveProjection
    fieldOfView: 40
    aspectRatio: 4/3
    nearPlane : 0.1
    farPlane : 3000.0
    position: Qt.vector3d( 0.0, -1000, 300.0 )
    upVector: Qt.vector3d( 0.0, 0.0, 1.0 )
    viewCenter: Qt.vector3d( 0.0, 0.0, 300.0 )
}

Configuration  {
    controlledCamera: camera
}


components: [
    FrameGraph {
        activeFrameGraph: ForwardRenderer {
            camera: camera
            clearColor: "white"
        }
    }
]

PhongMaterial {
    id: material
    ambient: Qt.rgba( 0.8, 0.8, 0.8, 1.0 )
    diffuse: Qt.rgba( 0.1, 0.1, 0.1, 0.5 )
    shininess: 50 //shining.value
}

Transform {
    id: logoTransform
}

Mesh {
    id: logoMesh
    source: "../res/model.obj"
}

Entity {
    id: logoEntity
    components: [ logoMesh, material, logoTransform ]
}

}

qt 3d
1
Bruce 24 Ноя 2018 в 16:09

1 ответ

Лучший ответ

Это ошибка qt 5.5, необходимо обновить версию qt.

1
Bruce 3 Дек 2018 в 02:07