在何种情况下应使用'if'条件,在何种情况下应在QtQuick中使用'when'条件?
下面是一个when语句用法:在何种情况下应使用'if'条件,在何种情况下应在QtQuick中使用'when'条件?,qt,qt-quick,Qt,Qt Quick,下面是一个when语句用法: onClicked: rectangleA.state == "one" ? rectangleA.state = "two" : rectangleA.state = "one" 为了方便起见,State元素有一个when属性,该属性可以绑定到表达式,以便在绑定表达式的计算结果为true时更改状态。当表达式的计算结果为false时,when属性将把状态恢复为默认状态 每当信号状态为临界状态时,钟组件将变为振铃状态 下面是一个if语句用法: onClic
onClicked: rectangleA.state == "one" ?
rectangleA.state = "two" : rectangleA.state = "one"
为了方便起见,State元素有一个when属性,该属性可以绑定到表达式,以便在绑定表达式的计算结果为true时更改状态。当表达式的计算结果为false时,when属性将把状态恢复为默认状态
每当信号状态为临界状态时,钟组件将变为振铃状态
下面是一个if语句用法:
onClicked: rectangleA.state == "one" ?
rectangleA.state = "two" : rectangleA.state = "one"
问题:在哪种情况下应该使用if条件,在哪种情况下使用条件?您提到了两种实现类似效果的方法 第一个(使用“when”)是声明方式,第二个(“if”)是命令式 声明式方法使用绑定,即(在Qt中)特殊的信号和插槽机制,在每次给定表达式的计算更改时更新目标属性;绑定本身将处于活动状态,直到您明确地为该属性指定新值或绑定为止 命令式当某些操作发生时,way只执行代码一次 QtQuick是一种声明性语言,建议使用这种方法,但并不是所有的问题都可以用它来解决。您所能做的最好的事情就是尽可能地减少代码中必要的部分 通常,您可以将这些方法视为(从电子设备借用的术语)边缘触发和级别触发的代码执行—当您希望执行某个动作触发的代码时(您可以将边缘解释为某个事件)使用命令式方法和
onSomethingChanged
或onsomethingchapped
处理程序;鼠标处理就是这种情况(因为它是基于事件的)。
另一方面,如果您希望在满足某个条件时始终维护一段代码(级别不变),请使用声明性方式
很难说什么方法适合您的示例—我不知道(第一种)如果您想在状态更改时只播放一个单音(那么您应该使用onStateChange
处理程序),或者只要bell
的状态是“RINGING”
,就可以播放声音—那么声明式方法就可以了。在第二个代码片段中,我将混合使用声明式和命令式(以最小化命令式代码),并添加isInOneState
boolean属性
property bool isInOneState: state == "one"
并以这种方式修改处理程序:
onClicked: isInOneState = !isInOneState
所以你可以绑定状态:
state: isInOneState ? "one" : "two"
当然,这适用于两个州。误解了问题,删除了我的答案,然后你就答对了。向上投票!