我编写了一个例PySide2/QML代码,但我无法使它退出程序。
PySide2代码:
import sys
from PySide2.QtGui import QGuiApplication
from PySide2.QtCore import QCoreApplication, Qt, QUrl
from PySide2.QtQuick import QQuickView
QCoreApplication.setAttribute(Qt.AA_EnableHighDpiScaling)
app = QGuiApplication(sys.argv)
view = QQuickView(QUrl('view.qml'))
view.show()
sys.exit(app.exec_())QML代码:
import QtQuick 2.3
import QtQuick.Controls 1.4
Rectangle {
width: 200
height: 200
color: "green"
Button {
text: "Hello World"
anchors.centerIn: parent
onClicked: Qt.quit()
}
}在命令提示符中使用代码运行时,当我单击按钮时会出现一个错误:
Signal QQmlEngine::quit() emitted, but no receivers connected to handle it.搜索网页时,我意识到其他人也有类似的问题,因为Qt的新语法。但这一切都发生在C++里,我不明白。
有人知道如何用Python解决这个问题吗?
发布于 2019-08-20 23:15:07
医生们注意到:
quit() 此函数将导致发出QQmlEngine::quit()信号。在用with场景进行原型设计中,这将导致启动程序退出;若要在调用此方法时退出C++应用程序,请将QQmlEngine::quit()信号连接到QCoreApplication::()插槽。
清楚地指出,您必须将QQuickView的QQmlEngine::quit()连接到QCoreApplication::quit():
import os
import sys
from PySide2.QtCore import QCoreApplication, Qt, QUrl
from PySide2.QtGui import QGuiApplication
from PySide2.QtQuick import QQuickView
if __name__ == "__main__":
QCoreApplication.setAttribute(Qt.AA_EnableHighDpiScaling)
app = QGuiApplication(sys.argv)
current_dir = os.path.dirname(os.path.realpath(__file__))
filename = os.path.join(current_dir, "view.qml")
view = QQuickView(QUrl.fromLocalFile(filename))
view.engine().quit.connect(QCoreApplication.quit) # <---
view.show()
sys.exit(app.exec_())https://stackoverflow.com/questions/57581974
复制相似问题