問題
使用clear()和removeItem()清空和刪除QComboBox中下拉item時,通過調試出現以下兩種報錯:
(1)正常運行程序出現的報錯:xxx\SogouInput\Components
(2)通過QT調試出現的報錯
Signal received
The inferior stopped because it received a signal from the Operating System.
Signal name : SIGSEGV
Signal meaning : Segmentation fault
解決方法
-
一開始找了很久都沒發現是什么問題,然后通過百度,看到有博主是通過以下的方法解決的,所以就嘗試了下,發現真的有效,方法如下圖:
-
后來想一想為什么取消信號的關聯就可以正常了呢?信號與槽的關聯無非就是信號一發出,槽函數就會執行的這么一個機制。所以再進行深一步的查找問題,發現調用QComboBox中的clear()和removeItem()方法時,該控件一樣也會發出SIGNAL(currentIndexChanged(int))的信號,那么這樣就可以定位有可能是關聯currentIndexChanged(int)信號的槽函數有錯誤,從而導致的段錯誤。細找,發現真的是槽函數訪問數據越界導致的段錯誤。
總結
-
問題原因: qt中出現以上的錯誤一般原因是因為訪問數據越界或者使用野指針導致的錯誤。
-
教訓: 在寫的每一行代碼都應該要有安全機制,避免出現段錯誤,有時候一些小小問題導致的段錯誤會讓你找到懷疑人生。