Qt ComboBox的重置与信号槽的冲突

今天做了个两个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);
发布了6 篇原创文章 · 获赞 0 · 访问量 232

猜你喜欢

转载自blog.csdn.net/qq_35342292/article/details/104580700