我正在加载一个QML文件在PyQt应用程序中,我想显示错误和警告消息,如果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_())发布于 2017-08-22 17:08:23
我不知道它在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。事实上,所有的错误都与控制台的错误相同。
在我的测试中,error这个代码错误anchors.centerIn: parnt将报告两次,一次由控制台报告,另一次由warnings信号处理程序报告:
警告:"qrc:/main.qml:13: ReferenceError: parnt is not defined“
qrc:/main.qml:13: ReferenceError: parnt未定义
因此,您应该检查您的QML代码是否包含任何错误,并检查您的控制台是否产生一些警告。
https://stackoverflow.com/questions/45805076
复制相似问题