解决QCombobox清空崩溃的问题
问题的提出
在QT界面上添加了一个QCombobox控件。根据需求,当某些参数修改后需要重新设置QCombobox的内容。可当执行clear()函数时程序崩溃。
问题探源
将clear()函数替换成:
int nn = ui.comboBoxListProj->count();
for (int i =nn-1;i>-1; i--)
{
ui.comboBoxListProj->removeItem(i);
}
跟踪发现是删除第0项时出错。而QCombobox的当前项为0项。因此可以推断是QCombobox当前选择项被删除引起的异常。
问题解决
找到QCombobox选择改变调用的函数,加容错判断:
if (ui.comboBoxListProj->count() < 1) return;
if (isel < ui.comboBoxListProj->currentIndex()) return;
问题解决
总结
QCombobox在调用clear()或removeItem(int)时会因为删除当前选项而触发QCombobox选择改变消息。此时会因为数据没有整理好而出现程序异常。处理办法是:1.加容错判断,2.解除消息和槽函数的连接,3暂停控件更新。