QQmlApplicationEngine没有发出警告信号

时间:2017-08-21 20:29:50

标签: python qt pyqt qml pyqt5

我在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 个答案:

答案 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代码是否包含错误,并检查您的控制台是否产生了一些警告。