QQmlApplicationEngine 没有发出警告信号
Posted
技术标签:
【中文标题】QQmlApplicationEngine 没有发出警告信号【英文标题】:QQmlApplicationEngine not emitting warnings signal 【发布时间】:2017-08-21 20:29:49 【问题描述】:我正在 PyQt 应用程序中加载 QML 文件,我想显示错误和警告消息以防 QML 文件无效。在这种情况下,QQmlApplicationEngine 应该发出warnings
信号,但这似乎不会发生。在下面的代码中,如果 QML 文件包含错误,则不会加载它,但永远不会调用 display_warnings
插槽。我究竟做错了什么? PyQt 版本是 5.9。
# -*- coding: utf-8 -*-
from PyQt5.QtGui import QGuiApplication
from PyQt5.QtQml import QQmlApplicationEngine
def display_warnings(warnings):
pass # Process warnings
if __name__ == '__main__':
import os
import sys
app = QGuiApplication(sys.argv)
engine = QQmlApplicationEngine()
engine.warnings.connect(display_warnings)
qml_filename = os.path.join(os.path.dirname(__file__), 'MainWindow.qml')
engine.load(qml_filename)
sys.exit(app.exec_())
【问题讨论】:
【参考方案1】:我不知道它在 Python 中是如何工作的,但在 C++ 中效果很好,即。报告所有 QML 错误:
QQmlApplicationEngine engine;
QObject::connect(&engine, &QQmlApplicationEngine::warnings, [=] (const QList<QQmlError> &warnings)
foreach (const QQmlError &error, warnings)
qWarning() << "warning: " << error.toString();
);
请注意,在这种情况下,连接类型是Qt::DirectConnection
。
实际上所有的错误都和控制台的一样。
在我的测试中这个代码错误anchors.centerIn: parnt
会报错两次,一个是控制台报错,一个是warnings
信号处理器报错:
警告:“qrc:/main.qml:13: ReferenceError: parnt is not defined”
qrc:/main.qml:13: ReferenceError: parnt is not defined
因此,您应该检查您的 QML 代码是否包含错误,并检查您的控制台是否产生一些警告。
【讨论】:
QML 代码肯定包含错误,但控制台中没有显示任何内容。可能是 PyQt 的问题,但是 PyQt 文档中关于 QQmlApplicationEngine 的内容并不多。以上是关于QQmlApplicationEngine 没有发出警告信号的主要内容,如果未能解决你的问题,请参考以下文章
QQmlApplicationEngine 列表索引超出范围问题
如何在使用 Qt.quit() 而不是整个 QGuiApplication 时只退出当前的 QQmlApplicationEngine?