首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt错误:发出信号QQmlEngine::quit(),但没有连接到处理它的接收器

Qt错误:发出信号QQmlEngine::quit(),但没有连接到处理它的接收器
EN

Stack Overflow用户
提问于 2019-08-20 21:52:04
回答 1查看 433关注 0票数 1

我编写了一个例PySide2/QML代码,但我无法使它退出程序。

PySide2代码:

代码语言:javascript
复制
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代码:

代码语言:javascript
复制
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()
    }
}

在命令提示符中使用代码运行时,当我单击按钮时会出现一个错误:

代码语言:javascript
复制
Signal QQmlEngine::quit() emitted, but no receivers connected to handle it.

搜索网页时,我意识到其他人也有类似的问题,因为Qt的新语法。但这一切都发生在C++里,我不明白。

有人知道如何用Python解决这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-20 23:15:07

医生们注意到:

quit() 此函数将导致发出QQmlEngine::quit()信号。在用with场景进行原型设计中,这将导致启动程序退出;若要在调用此方法时退出C++应用程序,请将QQmlEngine::quit()信号连接到QCoreApplication::()插槽。

清楚地指出,您必须将QQuickView的QQmlEngine::quit()连接到QCoreApplication::quit():

代码语言:javascript
复制
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_())
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57581974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档