解决Qt项目QCombobox清空崩溃的问题

解决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暂停控件更新。

猜你喜欢

转载自blog.csdn.net/imz2y/article/details/107633867