这是我到目前为止遇到的最奇怪的Qt错误,未执行的函数中未使用的var会导致QQmlEngine::load()
的严重崩溃。
需要几行代码才能重现它:
import QtQuick 2.7
import QtQuick.Window 2.2
Window {
id: main
visible: true
width: 500
height: 300
function foo() {
var c = main.width > 1 ? 27 : -147
}
}
它在5.7和5.7.1上崩溃,"股票" GCC在Qt网站上建立了windoze 7 x64和ubuntu 16.04。添加简单的console.log(c)
可以防止崩溃。再次注意,该功能完全合法,无法访问任何鱼腥物体,甚至不会被执行以产生崩溃。当引擎解析QML代码时,看起来非常错误。 条件在这里是关键,没有它就不会崩溃。
除了隐含的"这里发生了什么?"在发布错误报告之前,我还会借此机会向不同平台或Qt版本的人询问是否会影响其他人。