今天做了个两个QComboBox互相联动的功能,发现如果将一个ComboBox使用clear()方法清空,会发送CurrentTextChange信号到槽函数,控制台会输出这句异常
ASSERT failure in QList<T>::operator[]: "index out of range", file D:/qt/5.14.1/mingw73_64/include/QtCore/qlist.h, line 579
很明显应该是清空后,ComboBox内部的List容器已经没有成员了,index会置为-1,发送CurrentTextChange信号需要带一个成员的数据,所以造成了异常,解决方法也很简单,就是在清空前解除信号与槽的连接,清空后再重新连接,如下
//很恶心,需要取消连接才能重置ComboBox
disconnect(ui->nameCb,&QComboBox::currentTextChanged,this,&staffWindow::nameCbChange);
ui->nameCb->clear();
ui->nameCb->addItems(list);
connect(ui->nameCb,&QComboBox::currentTextChanged,this,&staffWindow::nameCbChange);