2014-12-10 2 views
0

Qt Quick Designer를 사용하여 만든 기본 GUI가 있습니다. 버튼을 클릭하면 텍스트의 색상이 변경되기를 원합니다. 그래서 여기에 나는 코드가 무엇을 : 나는 Qt를 디자인보기로 이동하려고 할 때Qt에서 선언적 방식으로 텍스트의 색을 변경하는 방법 QML

onClicked: { 

    if(displayText.color == "#ff0000") { 
      displayText.color = "Black"; 
    } 
    else if(displayText.color == "#000000"){ 
      displayText.color = "Red"; 
    } 
} 

그래서 내가 그것을 실행할 때 작동합니다, 그러나 그것은 명령 적 코드가 Qt를 빠른 디자이너에서 지원되지 않습니다 "라고 말한다 ". 제가 잘못한 일을하고 있습니까? 아니면 내가 만나는 Qt의 단점입니까? C++에서 이것을 처리 할 수있는 방법이 있지만 QML에서이 모든 것을 수행하기를 희망했습니다. 감사.

답변

2

경고를 무시하십시오. 귀하의 코드는 괜찮습니다. 단지 Qt Quick Designer가 아직 스크립트를 실행하지 못하거나 일부 스크립트 바인딩을 올바르게 처리 할 수 ​​없습니다. 속성 변경을 스크립팅하는 대신 상태를 사용하는 것이 좋습니다. 그것은 훨씬 깨끗하고 덜 중복 코드가 발생합니다 :

onClicked: state = (state !== 'clicked' ? 'clicked' : '') 

color: '#ff0000' // or #000000, if that's your default color 

states: State [ 
    name: 'clicked' 
    PropertyChanges { 
     target: displayText 
     color: '#000000' 
    } 
] 

Qt는 빠른 디자이너는 잘 상태를 처리하면 상태를 선택하고 디자이너에서 속성 값을 변경할 수있는, (그것은 상단을 보여줍니다).

0

당신의 경우는 간단한 부울 플래그를 나타내는 색상을 사용 :

property bool colorFlag: false 
... 
color: colorFlag ? "black" : "red" 
... 
onClicked: colorFlag = !colorFlag 

아니면 같은 것을 사용할 수 있습니다

MouseArea { 
    id: myMa 
} 
... 
color: myMa.clicked ? "black" : "red" 

이 방법은 미국보다 훨씬 저렴합니다.

관련 문제