前言:
Qt为我们封装了很多便捷使用的类和控件,还有相对非常丰富完善的文档。但是对于一些钻牛角尖的孩子(比如我),使用过程中总是会对一些Qt文档含糊不清的内容感到困惑,比如model/view框架下,什么情况下会发送dataChanged()这个信号,为什么我没发送这个信号view也会刷新呢?
本文便对这些信号进行分析,理论上是需要扒源码的,但我现在能力和时间有限,就总结工作中遇到的一些现象吧。
QComboBox
QComboBox就是下拉框控件,
从字面意义上理解,就是当我切换下拉框中的选项时会发送这个信号,这没有问题。于是我把这个信号连接到一个自定义的页面栈,当切换当前项时切换页面。
但是这时就出现了一个页面溢出的问题,即接收到这个信号但是没有创建对应的页面。
回顾程序发现,我的代码顺序是:combo添加项→页面添加页,切换combo时切换页面页。然鹅Qt在给Combo添加项时(即QComboBox::addItem()
),会自动切换到该项,即会发送currentChanged这个信号,而此时页面栈还没有添加对应的页,就会溢出。所以要注意这个问题。
总结:该信号在
常规切换
和添加/删除项
时都会发送。
注:由于本文没有扒源码,只是推理结论,如有错漏麻烦指出,谢谢!