今天遇到了一个问题,我子界面和主界面各有一个qlistwidget,然后点击item需要执行一些业务逻辑,在测试时发现软件崩溃,通过断点发现是主界面的槽被触发了。
为什么我点击的是子界面的qlistwidget,却也触发了主界面的槽?
现在来一步一步追踪。。。。
这是总的堆栈流程,第一步通过事件循环开始分发事件,可以看到从Main函数开始,走进了我们的application也就是我们的主线程事件循环,然后走到了QGuiApplication(QGuiApplication包含主事件循环,在该循环中,来自窗口系统和其他来源的所有事件都将被处理和调度)然后qeventloop是我们的事件循环类,然后一直走到23行,进入notify中,notify会捕获qt的所有事件,然后发送了鼠标事件(14行),触发qlistwidgetitem的currentchanged开始分发信号(6行),接收到信号后on_listWidget_currentItemChanged,同时被触发。
完整的追踪过程,子类槽触发堆栈