2017-03-06 30 views
0

私はスマートフォン向けの小さなアプリケーションを開発しています。エイリアスの使用に問題があります。 は、利便性のために私は、このコードスニペットで問題を再現していますQt qmlエイリアスの問題

import QtQuick 2.7 
import QtQuick.Controls 2.1 

ApplicationWindow 
{ 
    id:mainscreen 
    property alias text2_alias: text2.text 
    visible: true 
    width: 640 
    height: 480 

    Rectangle 
    { 
     id:rec1 
     y:0 
     height: 40 
     width:300 
     border.color: "blue" 

     Text { 
      id: text1 
      text: "aaaa" 
      text2_alias:"cccc" // <<<<<<<<<<<<< Error red underline !!! 
     } 


    } 
    Rectangle 
    { 
     id:rec2 

     width:300 
     height: 40 
     anchors.top: rec1.bottom 
     border.color: "blue" 
     Text { 
      id: text2 
      text: "bbbbb" 

     } 


    } 


} 

エラーは次のとおりです。存在しないプロパティ「text2_alias」私は間違っ に割り当てることができませんか?

ありがとうございました。

+0

'Text'は' text2_alias'という名前のプロパティを持っていません。プロパティエイリアスの詳細については、[this](http://doc.qt.io/qt-5/qtqml-syntax-objectattributes.html#property-aliases)のページを参照してください。 – folibis

+0

何が起こると思いますか? – derM

+0

ここで何をしようとしていますか? – dtech

答えて

0

text2_aliasは、mainscreenオブジェクトのプロパティです。これはtext1オブジェクトのtextプロパティへのエイリアスです。

text1オブジェクトのtext2_aliasはまったく何もありません。 text1にはそのようなプロパティはありません(エラーの内容)。

+0

Velkanに感謝します。 私は理解しましたが、プロパティtext2オブジェクトを実現するための回避策は何ですか? – Nicola

0

あなたのコードは実際には意味がないので、QMLエラーです。エイリアスの周りに誤解があるかもしれないと思います。

エイリアスを使用すると、他のプロパティに「参照」(または「ポインタ」)を作成したり、これらのプロパティへの簡潔なアクセスを提供したり、別の方法でアクセスすることができないオブジェクトに公開することができます。スコープ

text2_aliasを宣言すると、text2コントロールのtextプロパティへの参照が行われます。これにより、別のオブジェクトがこのテキストの値にバインドしたり、このテキストの値を読み取ることができます。

Text { 
    id: anotherTextBox 
    text: mainscreen.text2_alias 
} 

は(私はmainscreen.text2_aliasとしてエイリアスを参照に注意してください、それを使用するために、エイリアスの親のオブジェクト名を与える:あなたが追加した場合たとえば、mainscreenの別の子としてあなたのサンプルコードに次の)。このボックスに表示されるテキストは、常にtext2( "bbbbb")のテキストと同じです。 text1からこれを達成しようとしていますか?もしそうなら、何のエイリアスが必要とされない、とあなたは私のようにtext1を変更し、これを達成できます。

Text { 
    id: text1 
    text: text2.text 
} 

エイリアスのQt documentationはこれをより詳細に説明します。