JavaScript 和 QML 检查
对项目中的 QML 和 JavaScript 代码运行静态检查,以发现常见问题。
要运行静态检查,请转至Tools >QML/JS >Run Checks ,或按Ctrl+Shift+C。
在“问题”中的“QML ”和“QML Analysis ”筛选器中查看结果。
注意:若为 某个项目启用“QML Language Server ”,该功能将使用qmllint检查 QML 和 JavaScript 代码并生成警告,因此其错误代码和消息与《JavaScript 和 QML 错误代码》中的内容有所不同。
启用和禁用消息
要启用或禁用静态分析器的 QML 和 JavaScript 消息:
- 转至“Preferences ” > Qt Quick >QML/JS Editing 。
- 选择“Use customized static analyzer ”。

- 在“Enabled ”中,选择您希望显示的消息。
- 若要仅在“Qt Quick ”UI文件中显示特定消息,请在 Only for Qt Quick UI中选中它们。您无法仅针对非Qt Quick UI文件启用消息。
JavaScript 和 QML 错误代码
许多错误消息与 Douglas Crockford 的JSLint工具中的消息相似。有关 JSLint 错误的更多信息,请参阅《JSLint 错误说明》。
| Id | 严重性 | 消息 | 描述 |
|---|---|---|---|
| M1 | 错误 | 枚举值无效 | |
| M2 | 错误 | 枚举值必须是字符串或数字 | |
| M3 | 错误 | 预期为数值 | |
| M4 | 错误 | 预期为布尔值 | |
| M5 | 错误 | 预期为字符串值 | |
| M6 | 错误 | URL 无效 | |
| M7 | 警告 | 文件或目录不存在 | |
| M8 | 错误 | 颜色无效 | |
| M9 | 错误 | 预期锚定线 | |
| M10 | 错误 | 属性绑定重复 | 有关详细信息,请参阅《JSLint 错误说明》中的“键 '{a}' 重复”部分。 |
| M11 | 错误 | 预期为标识符 | 有关详细信息,请参阅《JSLint 错误说明》中的“预期为标识符,但发现的是 '{a}'(一个保留字)”。 |
| M14 | 错误 | ID 无效 | 有关详细信息,请参阅“预期为标识符,但实际遇到的是 '{a}'(一个保留字)”。 |
| M15 | 错误 | ID 重复 | 文件中的标识符必须是唯一的。有关更多信息,请参阅“重复的键 '{a}'”。 |
| M16 | 错误 | 属性名称无效name | |
| M17 | 错误 | Name 没有成员 | |
| M18 | 错误 | Field 不是object | |
| M19 | 警告 | 条件中的赋值 | 这可能是输入错误。如果是故意的,请将赋值用圆括号括起来。 |
| M20 | 警告 | 未结束的非空 case 代码块 | case 代码块应为空,或以流程控制语句结尾,例如break 、return 或continue 。此外,您也可以通过以// fall through 注释结尾来表示有意让程序继续执行。 |
| M23 | 警告 | 请勿使用eval | 有关更多信息,请参阅JSLint 错误说明中的“eval 是邪恶的”。 |
| M28 | 警告 | 无法执行 | 表示带下划线的语句永远不会被执行。 |
| M29 | 警告 | 请勿使用with | 有关详细信息,请参阅《JSLint 错误说明》中的“意外出现的 'with'”。 |
| M30 | 警告 | 请勿使用逗号表达式 | |
| M31 | 警告 | 不必要的消息抑制 | |
| M103 | 警告 | Name 已经是形式参数 | |
| M104 | 警告 | Name 已经是函数了 | |
| M105 | 警告 | 变量name 在声明之前已被使用 | |
| M106 | 警告 | Name already 是一个变量 | |
| M107 | 警告 | Name 该变量被声明多次 | 在函数中声明的变量在函数的任何位置都可见,即使是在嵌套代码块或for 语句的条件中声明的。重新声明该变量不会产生任何影响。 |
| M108 | 警告 | 在声明之前使用了函数name | 有关详细信息,请参阅《JSLint 错误说明》中“{a} 在定义之前已被使用”一节。 |
| M109 | 警告 | 请勿将Boolean 用作构造函数 | 有关详细信息,请参阅《JSLint 错误说明》中的“请勿将 {a} 用作构造函数”。 |
| M110 | 警告 | 请勿将String 用作构造函数 | 有关详细信息,请参阅“请勿将 {a} 用作构造函数”。 |
| M111 | 警告 | 请勿将Object 用作构造函数 | 有关详细信息,请参阅“请勿将 {a} 用作构造函数”。 |
| M112 | 警告 | 请勿将Array 用作构造函数 | 有关详细信息,请参阅“请勿将 {a} 用作构造函数”。 |
| M113 | 警告 | 请勿将Function 用作构造函数 | 有关详细信息,请参阅“请勿将 {a} 用作构造函数”。 |
| M114 | 提示 | function 关键字与左括号之间应仅有一个空格 | 有关详细信息,请参阅《JSLint 错误说明》中的“{a} 和 {b} 之间应恰好有一个空格”。 |
| M115 | 警告 | 请勿使用独立代码块 | 代码块不会影响变量的作用域。因此,未与if 、while 等关联的代码块没有任何效果,应避免使用。 |
| M116 | 警告 | 请勿使用空表达式 | |
| M117 | 警告 | 易混淆的加号 | 有关详细信息,请参阅《JSLint 错误说明》中的“易混淆的加号”。 |
| M119 | 警告 | 易混淆的减号 | 有关更多信息,请参阅《JSLint 错误说明》中的“易混淆的减号”。 |
| M121 | 提示 | 将所有函数变量声明在同一行 | |
| M123 | 提示 | 多余的括号 | |
| M126 | 警告 | == 以及!= 可能会进行类型强制转换,请使用=== 或!== 来避免此情况 | 非严格相等比较允许将其参数转换为共同类型。这可能会导致意外结果,例如' \t\r\n' == 0 返回 true。请使用严格相等运算符=== 和!== ,并明确指定所需的转换。 |
| M127 | 警告 | 表达式语句应仅为赋值、调用或删除表达式 | |
| M128 | 错误 | 状态不能包含指定的子项 | |
| M129 | 错误 | 无法递归实例化该类型 | |
| M201 | 提示 | 请将变量声明置于函数开头 | 有关更多信息,请参阅《JSLint 错误说明》中的“将 'var' 声明移至函数开头”。 |
| M202 | 提示 | 每行仅使用一条语句 | |
| M203 | 警告 | Qt Quick Designer 不支持命令式代码 | |
| M204 | 警告 | Qt Quick Designer 不支持此 QML 类型 | |
| M205 | 警告 | Qt Quick Designer 无法正确解析对父级 QML 类型的引用 | |
| M206 | 警告 | 此视觉属性绑定无法在本地上下文中进行求值,且可能无法在Qt Quick Designer 中按预期显示 | |
| M207 | 警告 | Qt Quick 设计器仅支持根 QML 类型中的状态 | |
| M208 | 错误 | 此 ID 可能存在歧义,且在Qt Quick Designer 中不被支持 | |
| M209 | 错误 | Qt Quick Designer 不支持将此类型(类型名称)用作根元素 | |
| M220 | 错误 | 此类型(类型名称)不支持作为 UI 文件(.ui.qml )的根元素 | 有关受支持的 QML 类型的更多信息,请参阅UI 文件。 |
| M221 | 错误 | 此类型(类型名称)在 UI 文件中不受支持(.ui.qml ) | 有关受支持的 QML 类型的更多信息,请参阅UI 文件。 |
| M222 | 错误 | UI 文件不支持函数(.ui.qml ) | 有关受支持的 JavaScript 函数列表,请参阅“受支持的方法”。 |
| M223 | 错误 | UI 文件不支持 JavaScript 代码块(.ui.qml ) | 有关受支持功能的更多信息,请参阅“UI 文件”。 |
| M224 | 错误 | UI 文件不支持该行为类型(.ui.qml ) | 有关受支持的 QML 类型的更多信息,请参阅UI 文件。 |
| M225 | 错误 | 状态仅在 UI 文件的根项目中受支持(.ui.qml ) | 有关受支持功能的更多信息,请参阅UI 文件。 |
| M226 | 错误 | UI 文件中不支持引用根项的父项(.ui.qml ) | 有关受支持功能的更多信息,请参阅UI 文件。 |
| M227 | 错误 | 请勿在 UI 文件中混合使用多种翻译函数(.ui.qml ) | 尽管支持多种不同的翻译函数(例如qsTr 和qsTrId ),但您应在 UI 文件中选择其中一种并始终如一地使用。有关详细信息,请参阅Qt Qml 方法。 |
| M300 | 错误 | 未知组件 | |
| M301 | 错误 | 无法解析name 的原型object | |
| M302 | 错误 | 无法解析原型name | |
| M303 | 错误 | 原型循环中,最后一个非重复组件是name | |
| M304 | 错误 | 属性类型无效name | |
| M305 | 警告 | == != 会进行类型强制转换,请使用 或 来避免此情况=== !== | 参见M126。 |
| M306 | 警告 | 调用以大写字母开头的函数时,应使用new | 根据惯例,以大写字母开头的函数是构造函数,应仅与new 一起使用。 |
| M307 | 警告 | 仅将 `new ` 用于以大写字母开头的函数 | 有关详细信息,请参阅《JSLint 错误说明》中的“请勿将 {a} 用作构造函数”。 |
| M308 | 警告 | 请勿将Number 用作构造函数 | 有关详细信息,请参阅“不要将 {a} 用作构造函数”。 |
| M309 | 提示 | 二元运算符两侧应使用空格 | |
| M310 | 警告 | 意外出现空代码块,请使用 ({}) 表示空对象字面量 | |
| M311 | 提示 | 为提高性能,请使用type 代替var 或variant | |
| M312 | 错误 | 属性缺失number | |
| M313 | 错误 | 预期为对象值 | |
| M314 | 错误 | 预期为数组值 | |
| M315 | 错误 | Value 预期为值 | |
| M316 | 错误 | 最大数值为number | |
| M317 | 错误 | 最小数值为number | |
| M318 | 错误 | 最大数值为(不包括该数值) | |
| M319 | 错误 | 最小数值不包含在内 | |
| M320 | 错误 | 字符串值与所需模式不匹配 | |
| M321 | 错误 | 字符串值的最小长度为number | |
| M322 | 错误 | 字符串值的最大长度为number | |
| M323 | 错误 | Number 数组值中应包含元素 | 有关更多信息,请参阅《JSLint 错误说明》中的“建议使用数组字面量表示法 []”。 |
| M324 | 错误 | 访问 AST 时达到最大递归限制,代码模型将不可靠且极有可能无效 | |
| M326 | 错误 | 组件仅允许有一个子元素 | 有关详细信息,请参阅Component 。 |
| M327 | 警告 | 组件需要一个子元素 | 有关详细信息,请参阅Component 。 |
| M400 | 警告 | 导入重复 | 一个导入语句被添加了两次。有关详细信息,请参阅“导入语句”。 |
| M401 | 错误 | 请勿将根项用作别名 | alias 属性不能直接引用根组件。请改为创建该组件的实例。 |
| M402 | 警告 | 请避免在层次结构中引用根项 | alias 属性不能引用层次结构中的根组件。请改为此组件创建一个实例。 |
| M403 | 错误 | “when”条件中不能包含对象 | 请将when 条件设置为一个表达式,当条件满足时,该表达式应评估为true 。 |
重置代码模型
如果在添加新的 QML 模块后看到以下错误消息,请尝试构建项目,然后重置代码模型:
- 未找到 QML 模块。
- 未知组件 (M300)。
要查看错误消息,请将鼠标指针悬停在代码编辑器中被Qt Creator 下划线的代码上,或在Qt Quick Designer中打开QML文件时查看。
要重置代码模型,请选择“Tools ” > “QML/JS ” > “Reset Code Model ”。
另请参阅 “检查代码语法”、“分析代码”以及“使用插件的 QML 模块”。
Copyright © The Qt Company Ltd. and other contributors. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.