qml中的两种信号处理方法的区别和使用

首先这里明确两个点,
第一:信号可以在一个普通的qml文件中定义并发出,当对应的信号发射时,信号处理器就会自动调用。

#定义#
可以是无参数的,如:
signal sig()//括号可省略
也可以是有参数的,如:
signal sig(string name,int age)

#发出#
通常是点击了一个按钮,或者文本框中的文字发生改变之类的事件处理器中发出的
无参数时,如:
onClicked:{
	sig()
}
有参数时,如:
onTextChanged:{
	sig(name,age)
}
切记,信号的发出不会无缘无故,更不能随便乱放,发出信号要在事件处理器中
这里为什么不说一定,因为我也是初学者,水平不高深,只写自己用到的

第二:信号处理器必须要在发出信号的对象的定义中进行声明,其中包含调用时要执行的JavaScript代码块。听着比较拗口,因为这是我跟书上抄来的,简而言之,就是,信号处理器的实现要在定义信号的那个对象中去实现。比如说,你在一个qml文件中定义了一个信号,如果想在另一个qml文件中去作信号处理,不能凭空就写了,它也要包含在信号定义的这个对象范围内,如实例化对象,再实现处理器。

信号处理方式主要有两种,一种是和上面一样,直接on:{xxxx},其中为信号的名字,首字母需要大写。另一个是通过使用Connections类型来实现,如

Connections{
	target:xxx	
	//信号处理函数
	function fun(){//注:括号里不加参数,官方定义,信号处理函数中可以使用传入的参数
		xxx
	}
}

这两个最开始我都没明白具体怎么用他们,什么时候用,这俩有啥区别。
现在进入这两个的区分:
1、on\
如果一个信号发出之后,不会关联别的信号,它只是自己单独地发出信号,处理一些事情,不用等待别的信号发生,和别的信号互不搭嘎,这个时候只需要这种方式就可。
2、Connections
由上可知,Connections的使用情形与之相关,就是在发射信号的对象外部使用这个信号。即可以将某个信号和其他信号联系起来。可以理解为,信号A发出后,需要对象B(target)发出某些信号后,才可以完成某些操作。
常见的有,在对象A中通过按钮发出信号Sig1,打开某个选项窗口(有确认取消按钮,id设为B),在点击确认(信号Sig2)后,完成事件处理onSig()。可写成大概这个样子:

Rectangle{
	id: B
}
Rectangle{
	id: A
	Connections{
		target: B
		onSig(){
			xxx
		}
	}
}

你可能感兴趣的:(Qt学习,信号处理)