バインディングの重複
この警告カテゴリーはqmllintによって[duplicate-property-binding]
。
プロパティでインターセプタが重複している
何が起こりましたか?
一つのプロパティに複数のインターセプタがあります。
なぜ悪いのですか?
同じプロパティに複数のインターセプタを設定することはQMLエンジンではサポートされていません。
例
Behavior をインターセプターとして同じプロパティに2回使ってみましょう:
import QtQuick Rectangle { Behavior on width { NumberAnimation { duration: 1000 } } Behavior on width { // not ok: Duplicate interceptor on property "width" [duplicate-property-binding] NumberAnimation { duration: 2000 } } }
この警告を修正するには、Behavior 以外を削除してください:
import QtQuick Rectangle { Behavior on width { NumberAnimation { duration: 2000 } } }
Property Modifier Typesも参照してください。
プロパティで値のソースが重複している
何が起こりましたか?
一つのプロパティに複数の値ソースがあります。
これはなぜ悪いのでしょうか?
値ソースが結合されると、予期しない動作を示します。以下の例をご覧ください。
例
同じプロパティの値ソースとしてNumberAnimation を2回使ってみましょう:
import QtQuick Rectangle { NumberAnimation on x { to: 50; duration: 1000 } NumberAnimation on x { to: 10; duration: 100 } // not ok: Duplicate value source on property "x" [duplicate-property-binding] onXChanged: console.log(x) }
そのプログラムの出力をチェックすると、2つのNumberAnimation が互いにインターリーブしていることがわかります。これは、おそらく意図された効果ではありません。この警告を修正するには、NumberAnimation を1つ除いてすべて削除してください:
import QtQuick Rectangle { NumberAnimation on x { to: 50; duration: 1000 } }
値のソースとバインディングを結合できません
何が起こったのでしょうか?
あるプロパティに値ソースとバインディングがあります。
これはなぜ悪いのでしょうか?
バインディングは、値ソースがこのプロパティの更新を開始する前に、プロパティ値を更新します。これは予期しない動作につながる可能性があり、また読みにくくなります。
例
同じプロパティの値ソースとしてNumberAnimation :
import QtQuick Rectangle { NumberAnimation on x { to: 50; duration: 1000 } // not ok: Cannot combine value source and binding on property "x" [duplicate-property-binding] x: 55 onXChanged: console.log(x) }
このプログラムの出力を確認すると、NumberAnimation が 55 から 50 にアニメーションしていることがわかります。これは、次のコードの方が読みやすいでしょう:
import QtQuick Rectangle { NumberAnimation on x { from: 55; to: 50; duration: 1000 } // ok: intentions are clearer now! }
ここで提供されるドキュメントの著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。