我正在使用Qt.createQmlObject()
从文件创建QML
对象。在文件损坏的情况下,QML会输出如下所示的消息:
Qt.createQmlObject(): failed to create object:
qrc:/graphics/inline:5:2: Expected token
}“`
我想抓住这条消息,告诉用户他的文件已损坏。
我正在尝试使用Qt.createQmlObject()
中提供的第三个参数,但我不明白它是如何工作的。维基很好地描述了这个功能,但没有给出任何利用它的例子:
https://wiki.qt.io/QML_Dynamic_Objects#Creation_of_Dynamic_QML_Objects
第三个参数是在Qt Creator IDE中用作错误报告中的文件名的字符串。例如,如果在加载的QML字符串中遇到错误,则在具有文件名名称的文件中将其报告为一个错误。在调用时,作为字符串的文件名必须用双引号括起来。
答案 0 :(得分:7)
你需要使用" try-catch"阻止这样:
try {
var newObject = Qt.createQmlObject('import QtQuick 2.0; Rectangle11 {color: "red"; width: 20; height: 20}',
this,
"dynamicSnippet1");
} catch (error) {
print ("Error loading QML : ")
for (var i = 0; i < error.qmlErrors.length; i++) {
print("lineNumber: " + error.qmlErrors[i].lineNumber)
print("columnNumber: " + error.qmlErrors[i].columnNumber)
print("fileName: " + error.qmlErrors[i].fileName)
print("message: " + error.qmlErrors[i].message)
}
}
中对此进行了描述
答案 1 :(得分:1)
从Qt 5开始,更通用的方法是安装自己的调试消息消息处理程序,如以下所述:
https://doc.qt.io/qt-5/qtglobal.html#qInstallMessageHandler
然后您可以在自己的消息处理程序中放置一个断点。
这样做的优点是,它适用于Qt.createQmlObject以外的方案,例如当不涉及您自己的C ++的用户操作触发警告时。