我在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_())
答案 0 :(得分:0)
我不知道它在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
信号处理程序报告:
警告:&#34; qrc:/main.qml:13:ReferenceError:parnt未定义&#34;
qrc:/main.qml:13:ReferenceError:未定义parnt
因此,您应该检查您的QML代码是否包含错误,并检查您的控制台是否产生了一些警告。