在写qml程序时,遇到一种bug,子视图覆盖在父视图之上显示,但是还可以点击到父视图的内容,从而使程序紊乱,出现这个问题,就与程序的架构设计有关,如果设计不合理,即会出现这个问题,修改起来也是很麻烦。
先上一个出现上述问题的例程:
(晚上续写)
一转眼,两周过去了,终于抽了个时间来写这篇文章,到现在还能记得起来的,才是真正记住的吧。
回到上面的问题,在一个qml界面中,有一个父界面,当达到条件,子界面覆盖父界面显示,但是父界面却并不能将visiable设置为false,因为父界面还有一部分在显示,是配合子界面的,一般的程序思路是这样的(我一开始也是这样写的)
Rectangle{//父界面
Rectangle{//子界面
Rectangle{//孙子界面
}
}
MouseAera{
}
}
这种情况下,父界面的MouseArea会将子界面的鼠标事件截断,导致子界面的点击事件失效。
方法一:
为了避免这种尴尬,我们可以将将嵌套式构建更改为并行构建,例如
Rectangle
{}//父界面
Rectangle
{}//子界面
Rectangle
{}//孙子界面
这样在父界面中做屏蔽鼠标事件就不会影响到子界面和其他界面了。
方法二:
使用状态机,将各个界面通过状态来切换,在状态机中切换也是一个不错的,为此专门研究状态机研究了一个下午。具体状态机的使用请参考:(文章还没有发布,发布将链接贴上来)。
最后谈谈对架构的理解,因为最近一段时间一直在对自己之前写的程序改bug,改的过程中,发现有好多程序的设计都不好(当时写的时候肯定没觉得啦),就有了另外一中构建方法,比原来的构建要更加清晰,思路完善,代码长度也会减少,这是一中进步,而这新的构建,就是对架构的一中理解的提升。文章记录的更重要的思路,具体的代码实现没有贴出来。每个人都会有不同的理解吧。