Qt Rectangle over QQuickItem не отображается правильно

У меня болезненная проблема в QT5 с использованием QQuickItem. Мне пришлось рисовать 3D-модель, используя чистый openGL в QML, поэтому я создал свой собственный QQuickItem. До сих пор все работает как положено: 3D-модель прекрасно отображается в QML.

Проблема возникает, когда я хочу поместить простой прямоугольник в тот же QML рядом с моим пользовательским QQuickItem. 3D-модель больше не отображается. Это почему?

Вот мой быстрый код товара:

    MQuickItem::MQuickItem(){
        isInit = false;

    connect(this, SIGNAL(windowChanged(QQuickWindow*)), this, SLOT(handleWindowChanged(QQuickWindow*)));
}


    void MQuickItem::handleWindowChanged(QQuickWindow *win){
        w = new SMThickness3DView(/*width(), height()*/);

    if(win){
        connect(win, SIGNAL(sceneGraphInitialized()), this, SLOT(initializeMGL()), Qt::DirectConnection);
        connect(win, SIGNAL(beforeRendering()), this, SLOT(paintMGL()), Qt::DirectConnection);
        connect(win, SIGNAL(widthChanged(int)), this, SLOT(resizeMGL()), Qt::DirectConnection);
        connect(win, SIGNAL(heightChanged(int)), this, SLOT(resizeMGL()), Qt::DirectConnection);

        win->setClearBeforeRendering(false);
    }
}

void MQuickItem::initializeMGL(){
    w->initializeGL();
    isInit = true;
}

void MQuickItem::paintMGL(){
    w->paintGL();
//    connect(window()->openglContext(), SIGNAL(aboutToBeDestroyed()), this, SLOT(cleanupMGL()), Qt::DirectConnection);
}

void MQuickItem::resizeMGL(){
    if(isInit){
        w->resizeGL(width(), height());
        w->paintGL();
    }
}

void MQuickItem::cleanupMGL(){
}

void MQuickItem::rotatePerson(bool toLeft){
    if(toLeft)
        w->setYaw(std::min(w->getYaw() + 2., 90.));
    else
        w->setYaw(std::max(w->getYaw() - 2.0, -90.0));
}

А вот мой QML с маленьким прямоугольником над 3D-моделью:

Item {
    anchors.fill: parent
    anchors.centerIn: parent

    MQuickItem {
        id: obj

        property bool mReleased: true
        anchors.fill: parent

        MouseArea{
            id: mArea
            anchors.fill: parent
            drag.target: dummy

            property int initialPressedX;
            property int initialPressedY;

            onPressed: {
                initialPressedX = mArea.mouseX;
                initialPressedY = mArea.mouseY;
            }

            onPositionChanged: {
                var diff = mArea.mouseX - initialPressedX;

                if(Math.abs(diff) > 10){
                    if(diff < 0){
                        obj.rotatePerson(false)
                    }
                    else{
                        obj.rotatePerson(true)
                    }

                    initialPressedX = mArea.mouseX;
                    initialPressedY = mArea.mouseY;
                }
            }

            Rectangle{id: dummy}
        }
    }
    Rectangle{
        id:thisIsTheRectangleThatMakesMyModelDisapear
        width: 50
        height: 50
        color:"red"
    }
}

Кто-нибудь может дать мне хотя бы объяснение этой проблемы или какие-то предложения?

0 ответов

Другие вопросы по тегам