そして、QMLでの信号の関数
https://blog.csdn.net/iEearth/article/details/41801333
QtのC ++で、信号・スロットに信号信号は、コア機構はUIニューラルネットワークと相互作用するが、またQMLでは、同様のシグナル・ハンドラメカニズムが存在すること、アプリケーション・コンポーネントであり、私たちはしばしば言うイベントによって信号を処理するシグナルハンドラ信号プロセッサ。信号が信号を送信されると、ハンドラがトリガされ、対応する信号プロセッサは、我々は、信号の信号イベントを処理するハンドラの信号プロセッサで何かを行うことができます。
1、 "HelloWorldの" ブリーフ信号
以下は簡単な例です:
インポートQtQuick 2.3
インポートQtQuick.Controls 1.2
長方形{
幅:360。高さ:200
色:「水色」
ボタン{
テキスト:「終了!」
anchors.centerIn:親onClicked:Qt.quit()
}
}
長方形のボタンがあり、これは()シグナルをクリックデフォルトのボタンがあり、対応する信号プロセッサはonClickedがあるでしょう。信号()信号がある場合、ハンドラに対応する信号プロセッサは場合、信号は、信号プロセッサを有するパラメータを受信し、使用することができることに注意onSignalあります。我々は、マウスの左ボタンのボタンの例をクリックすると、)(クリックされた信号が送信されます、トリガ信号プロセッサは、アプリケーションを終了するQt.quit()関数と呼ばれ、ここで、onClicked。
2、属性ハンドラ
属性値の変更QMLは、自動的に信号プロセッサのフォーマットに対応する属性値の変更に信号を送信するときは内蔵のかQMLのプロパティ、変更<プロパティ>上にある、または当社のカスタム属性、属性値、一度次のように変更は、例えば、対応する信号処理をトリガします。
インポートQtQuick 2.3
インポートQtQuick.Controls 1.2
長方形{
幅:360。高さ:100
色: "水色"がonColorChanged:はconsole.log( "色が変化")
ボタン{
テキスト: "カラー変更"
anchors.centerIn:親
onClicked:parent.color = "黄色"
}
}
ボタンボタンをクリックすると、本来の水色から四角形の色が黄色になり、それはonColorChangedをトリガーする、出力「色を変更します」。
3、追加signalhandler
追加の信号処理は、以下の実施例およびキーコンポーネントで、例えば、むしろ現在のオブジェクトよりも、添加元素の種類からの信号を受信します。
インポートQtQuick 2.3 長方形{ ID:RECT 幅:360。高さ:100点の フォーカス:真Keys.onSpacePressed:rect.color = Qt.rgba(Math.random()、Math.random()、Math.random()、1)Component.onCompleted:rect.color = "グリーン" }
我々はComponent.onCompleted上述の例を使用して、四角形が緑色である場合、色成分もKeys.onSpacePressedを用い、終了するスペースバーを押したとき、長方形ランダムに色を変化させる設定。数学はQMLはJavaScriptが、ほとんどのもののJavaScriptサポートの拡張であるため、我々は直接使用することができるJavaScriptオブジェクトです。
4、接続ハンドラの接続を使用して
前の例では、我々は直接信号プロセッサの形で<信号>の現在のオブジェクトの信号の信号を使用し、私たちは、例えば、信号接続を接続するために使用する必要がある場合には、同じ信号に接続された複数のオブジェクトは、接続を確立すると、接続が(例えば、C ++で定義されたオブジェクトとして)QMLオブジェクトで定義されていない示した、外部送信信号の範囲をオブジェクト:
インポートQtQuick 2.3 アイテム{ 幅:500。高さ:150 行{ 間隔:50 長方形{ 幅:100。高さ:100 色"赤" MouseArea { anchors.fill:親はonClicked:parent.color = Qt.rgba(Math.random()、Math.random()、Math.random()、1) } } 長方形{ ID :rectYellow 幅:100; 高さ:100 色: "黄色" MouseArea { anchors.fill:親接続 { onClicked:rectYellow.color = Qt.rgba(Math.random()、Math.random()、Math.random()、1) } } } 長方形{ ID:rectGreen 幅:100。高さ:100 色: "緑" MouseArea { ID:mouseArea anchors.fill:親 } 接続 { ターゲット:mouseArea onClicked:rectGreen.color = Qt.rgba(Math.random()、Math.random()、Math.random( )、1) } } } }
上記の例では、3つの使用を含みます。第一、第二の使用と同様、直接MouseAreaスコープに接続され、それは第2の方法は省略することができる接続を見ることができ、MouseAreaは、第三の方法では、マウスイベントを処理するための領域を特定するスコープMouseAreaありますマウスが四角形をクリックすると、接続の外を確立し、それが接続を使用していた、三つの方法は、ランダムな変化の色です。
5、カスタム信号、機能
QMLでは、我々はあなたがいないサポートは、Cのようにオーバーロードして、それを宣言した最初の必要性++、構文は次のようにされ、信号および機能をカスタマイズすることができます。
信号<signalName> [(<タイプ> <パラメータ名> [、...]])] 関数<functionNameを>([<ParameterNameが> [、...]]){<BODY>}
信号および機能の定義は、パラメータを取ることができますので、違いは、信号は、パラメータの種類を示すためにということで、機能は、彼らは、理由である、必要な全能のvarタイプへの関数のデフォルトのパラメータの型ので、しかし、C ++のように好きではなかったしません。戻り値の型を指定する必要があり、以下は、統合の例です。
インポートQtQuick 2.3 アイテム{ 幅:600。高さ:100 長方形{ ID:RECT1 幅:100。高さ:100 色: "水色" テキスト{ ID:テキスト1 anchors.centerIn:親 テキスト: "カスタム\ nは信号" } } 長方形{ ID:RECT2 幅:100。高さ:100 anchors.right:parent.right 色: "水色" 機能changeColor(OBJ){ obj.color = Qt.rgba(Math.random()、Math.random()、Math.random()、1) } テキスト{ ID:テキスト2 anchors.centerIn:親 のテキスト: "カスタム\ N-目的球" } } コンポーネント{ ID:色成分 長方形{ ID:colorMakerの 幅:100、高さ:100 信号colorMade(カラーCOL)//信号 MouseAreaを{ anchors.fill。親onClicked:colorMaker.colorMade(colorMaker.color)//関数信号を呼び出して、送信信号と同様colorMade } } } ローダー{ ID:redLoader anchors.left:rect1.right anchors.leftMargin:50 sourceComponent:色成分 onLoaded:item.colorは= "赤" } ローダー{ ID:greenLoader anchors.right:rect2.left anchors.rightMargin:50 sourceComponent:色成分 onLoaded:item.color = "グリーン" } 接続{ //観客機能信号とスロットが接続 ターゲット:redLoader.item onColorMade:{ //関数処理タンク観客は信号 rect2.changeColor(テキスト2])// text1.color COL = } } 接続{ //ターゲットオブジェクト信号とスロット機能を接続 対象:greenLoader.item onColorMade:{//スロット関数処理対象のオブジェクト信号 rect2.changeColor(テキスト2) text1.color COL = } } }
このコードは、少しのように見えますが、複雑な知識ポイントの多くを兼ね備えた、と我々は見て分析するもの。RECT2カスタム関数changeColor(OBJ)に、ランダムに変更されるOBJオブジェクトの色は、関数のパラメータが明示的にタイプを示していない、ダイナミック型です。我々のカスタム信号がcolorMade(色COL)であるコンポーネントのコンポーネント定義は、パラメータ型の信号が明確に識別される、信号プロセッサはQMLに、C ++で発光キーワードを使用して信号を送信するためにこのパラメータを使用することができ信号は、関数のように使用することができる特別な機能です。Loaderコンポーネントを動的に保存されたアイテムの属性がそのコンポーネントがロードされているということですロードし、その後、当社独自の信号を接続する信号プロセッサと、当社のカスタム関数を呼び出すために接続を使用しています。
図6に示すように、接続()/切断()を使用
さらに、信号の接続方法を説明し、信号自体は、言っても過言ではない、コードを直接見て二つの信号または方法を接続または切断する()/切断()関数を接続します。
2.3 QtQuickインポート アイテム{ ID:商品 シグナル雇用(文字列名) シグナル従業員(文字列名)スロット関数の//従業員 onEmployee:コンソールの.log(名前、「信号から」) 関数の採用(名){ にconsole.log(名前、 "機能から") } Component.onCompleted:{ //溝関数雇用信号または複数の信号を接続する 。item.employer 接続(採用) 。item.employer 接続(従業員) 雇用( "聖書") } }
実施例は、信号及び他の信号機能によって接続された比較的単純な、導入されません。
==============終了