Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在何种情况下应使用'if'条件,在何种情况下应在QtQuick中使用'when'条件?_Qt_Qt Quick - Fatal编程技术网

在何种情况下应使用'if'条件,在何种情况下应在QtQuick中使用'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

下面是一个when语句用法:

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"

当然,这适用于两个州。

误解了问题,删除了我的答案,然后你就答对了。向上投票!