[英]pyqt5 qml minimal example crashes on exit
我有這個小示例應用程序導致崩潰。
main.py
import sys
from PyQt5.QtCore import QUrl
from PyQt5.QtGui import QGuiApplication
from PyQt5.QtQml import QQmlApplicationEngine
def run():
app = QGuiApplication(sys.argv)
engine = QQmlApplicationEngine()
engine.load(QUrl('main.qml'))
if not engine.rootObjects():
return -1
return app.exec_()
if __name__ == '__main__':
sys.exit(run())
main.qml
import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.3
import QtQuick.Dialogs 1.2
ApplicationWindow {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
FileDialog {
id: fileDialog
selectFolder: true
onAccepted: {
console.log('activated')
}
}
Button {
anchors.centerIn: parent
text: "Open"
onClicked: {
fileDialog.open()
}
}
}
要導致崩潰,只需打開應用程序,單擊按鈕,選擇目錄,接受然后關閉應用程序。
控制台顯示警告消息:
QObject::startTimer: Timers can only be used with threads started with QThread
然后應用程序崩潰了。 任何線索為什么或如何獲取錯誤消息/堆棧跟蹤?
環境:Windows 10,python 3.6.1,PyQt5 5.9
在調用app.exec()之前,您可以添加以下行:
app.aboutToQuit.connect(lambda: app.closeAllWindows())
Chris鏈接幫助解決了這個問題。 退出時不再有應用程序崩潰。
我發現修復很簡單,只需將parent
參數傳遞給QQmlApplicationEngine()
:
engine = QQmlApplicationEngine(parent=app)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.