2013-09-30 50 views
1

http://qt-project.org/doc/qt-5.0/qtquick/qtquick-statesanimations-states.html#the-when-property在哪種情況下應該使用`if`條件,並且在這種情況下應該在QtQuick中使用`when'條件?

下面是一個語句用法:

爲方便起見,國元具有時能結合表達式來改變狀態,只要綁定表達式的值爲true財產。當表達式計算結果爲false時,when屬性會將狀態恢復爲默認狀態。

Rectangle { 
    id: bell 
    width: 75; height: 75 
    color: "yellow" 

    states: State { 
       name: "RINGING" 
       when: (signal.state == "CRITICAL") 
       PropertyChanges {target: speaker; play: "RING!"} 
      } 
} 

每當signal.state爲CRITICAL鍾分量將變爲振鈴狀態。


下面是一個如果語句用法:

onClicked: rectangleA.state == "one" ? 
    rectangleA.state = "two" : rectangleA.state = "one" 

問題:在這種情況下,應該在如果條件下使用,在這種情況下是條件被使用?

回答

2

你已經提到了兩個選項來達到類似的效果。

首先(使用「when」)是聲明方式,second(「if」)勢在必行。

聲明方式使用綁定 - 即(Qt中)的特殊信號&槽機制來更新目標屬性的給定的表達的變化,每次評估;綁定本身將處於活動狀態,直到您明確指定新值或綁定到該屬性。

命令式當某個動作發生時,只執行一次代碼。

Qt QUICK是一種聲明性語言,建議使用此方法,但並非所有問題都可以使用它來解決。您可以做的最好的做法是儘可能減少代碼中必要的部分。

一般來說,你可以認爲(從電子借來的術語),這些方法作爲的邊沿觸發電平觸發執行的代碼 - 當您要執行一些代碼一旦被某些動作觸發(你可以解釋邊緣作爲一些事件)使用命令式處理和onSomethingChangedonSomethingHappened處理程序;鼠標處理確實是這種情況(因爲它是基於事件的)。另一方面,如果你想要一段代碼一直保持一定的條件滿足,(級別不變) - 使用聲明方式。

很難說出哪些方法適合您的示例 - 如果您只想在狀態更改時播放單聲道聲音(您應該使用onStateChange處理程序),則不知道(第一個),或播放聲音只要bell的狀態是"RINGING" - 那麼聲明式方法就沒有問題。在第二個片段,我會用的聲明和必要的組合(以儘量減少必要的代碼),並添加isInOneState布爾屬性

property bool isInOneState: state == "one" 

,並以這種方式修改處理程序:

onClicked: isInOneState = !isInOneState 

,所以你可以綁定狀態:

state: isInOneState ? "one" : "two" 

當然,這適用於兩種狀態。

+0

誤解了這個問題,刪除了我的答案,然後你說得對。 Upvoted! – ksimons

相關問題