У меня есть простое приложение 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)
вместо этого.
Мой вопрос заключается в том, почему это происходит, поскольку я хотел бы избежать принятия решений по коду без должного понимания того, что я делаю.