Почему QQmlAppicationEngine аварийно завершает работу при выходе, если QApplication специально не упоминается как родительский? - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть простое приложение qml, следующее за учебником по QmlBook. Код Qml таков:

Window {
    id: root
    visible: true
    width: Screen.width / 2
    height: Screen.height / 2
    title: "Happy Windmill"

    onHeightChanged: console.log('new window height: ', height)
    property int spins: 0
    property int fpresses: 0

    Image {
        id: background
        anchors.fill: parent
        source: "assets/background.png"
        MouseArea {
            anchors.fill: parent
            onClicked: {
                wheel.rotation += 90
                incrementSpinCounter()
            }

        }


        Image {
            id: pole
            source: "assets/pole.png"
            anchors.horizontalCenter: parent.horizontalCenter
            anchors.bottom: parent.bottom
            anchors.top: wheel.verticalCenter
        }

        Image {
            id: wheel
            source: "assets/pinwheel.png"
            anchors.centerIn: parent
            Behavior on rotation {
                NumberAnimation {
                    duration: 250
                }
            }
        }
    }
    function incrementSpinCounter(){
        spins += 1
    }

    function incrementFCounter(){
        fpresses += 1
    }
}

Я запускаю его с QQmlApplicationEngine, используя PyQt5. Код python для выполнения приложения выглядит так:

def run_qml():
    app = QGuiApplication(sys.argv)
    engine = QQmlApplicationEngine(parent=app)
    engine.load('main.qml')
    sys.exit(app.exec_())


if __name__ == '__main__':
    run_qml()

При каждой ссылке, которую я видел, QmlApplicationEngine всегда объявлялся как engine = QmlApplicationEngine(), однако, когда я запускаю код, подобный этому , это работает, но затем падает, когда приложение закрывается с ошибкой QPixmap: Must construct a QGuiApplication before a QPixmap. Это исправлено, когда я использую engine = QmlApplicationEngine(parent=app) вместо этого.

Мой вопрос заключается в том, почему это происходит, поскольку я хотел бы избежать принятия решений по коду без должного понимания того, что я делаю.

...