簡體   English   中英

pyqt5 qml最小示例在退出時崩潰

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM