Qt 5 の未来は明るいブログ

[QTBUG-38463] Qt Quick のバグを直してもらいました。

Published: 2014-06-05 / Last modified: 2015-07-16

The id Attribute - QML Object Attributes | QtQml 5.3

Every QML object type has exactly one id attribute. This attribute is provided by the language itself, and cannot be redefined or overridden by any QML object type. A value may be assigned to the id attribute of an object instance to allow that object to be identified and referred to by other objects. This id must begin with a lower-case letter or an underscore, and cannot contain characters other than letters, numbers and underscores.

(訳)QML の id 属性は言語として提供されている属性で、他の型で再定義できません。各オブジェクトの id に設定された値はそのオブジェクトを特定し、他の場所から参照するために使われます。アルファベットの小文字かアンダースコアではじまって、アルファベットと数字とアンダースコアで構成されている必要があります。

というわけで、QML では id プロパティは言語仕様として特別扱いになっているのですが、Qt 5.1 までは動作していた以下のような QML が、Qt 5.2 で行われた JavaScript エンジンの刷新に伴って(?)動かなくなった(警告で落ちる)ので修正してもらいました。

import QtQml 2.0

QtObject {
id: root
property int id
}

とりあえずバグを報告

自分で直せるかどうかぱっと見よく分からなかったので、とりあえずバグレポートを書いておきました。[#QTBUG-38463] QML Crash when an element has "property int id"

タイトルも説明もシンプルですけど、これだけの情報でこのバグの再現は可能なので問題はないでしょう。

バグを修正してもらえた

Change I0da58557: Fix crash (failing assertion) when declaring a non-string id property というパッチを QML のメンテナの人が作ってくれて、Lars のレビューを経てマージされました。

This isn't very useful QML, but the following was "legal" in 5.1:

とか言われたので、そんなことないんだーとコメントしておきました。

というわけで、(リグレッションかつクラッシュなのでシステム的にはプライオリティ高いんでしょうけど、)こんなほんとどうでもいいバグでも直してもらえたので、みなさんバグを見つけたらちゃんと報告して直してもらいましょう。

この修正は今月リリース予定の Qt 5.3.1 に含まれる予定です。