Qt 为什么QComboBox::removeItem()会崩溃

Qt 为什么QComboBox::removeItem()会崩溃,qt,qcombobox,Qt,Qcombobox,我想从QComboBox中删除所有项目。我用以下代码进行了尝试: void refreshServiceComboBox(std::vector<QString> service){ if ( !s_serviceComboBox->isVisible() ){ s_serviceComboBox->setVisible( true ); } int numberOfItems = s_serviceComboBox->count()

我想从QComboBox中删除所有项目。我用以下代码进行了尝试:

void refreshServiceComboBox(std::vector<QString> service){
   if ( !s_serviceComboBox->isVisible() ){
      s_serviceComboBox->setVisible( true );
   }

   int numberOfItems = s_serviceComboBox->count();

   for (int i = (numberOfItems-1); i >= 0 ; i--){
       s_serviceComboBox->removeItem(i);
   }


   for (int u = 0; u < service.size(); u++){
       std::cout << "Service: " << service[u].toStdString() << std::endl;   
   }

   // 
   for (unsigned int n = 0; n < service.size(); n++){
       s_serviceComboBox->addItem(service[n]);
   }
}
void refreshServiceComboBox(标准::向量服务){
如果(!s_serviceComboBox->isVisible()){
s_服务组合框->设置可见(真);
}
int numberOfItems=s_serviceComboBox->count();
对于(int i=(numberOfItems-1);i>=0;i--){
s_服务组合框->删除项(i);
}
对于(int u=0;ustd::cout您应该尝试使用方法(slot)
QComboBox::clear()清除组合框

然后用
QComboBox::addItems

void refreshServiceComboBox(const std::list&service)//更好的QStringList
{
如果(!s_serviceComboBox->isVisible())
s_服务组合框->设置可见(真);
s_服务组合框->清除();
s_serviceComboBox->addItems(QList::fromStdList(service));
}

我知道您遇到了什么,但我没有谈到addItems部分,因为当程序调用s_serviceComboBox->clear()时,方法调用终止;因此addItems将不会执行..您的意思是
终止下的sigfault
吗?如果这是真的,您将取消引用NULL指针,但您声称
是可见的()
已传递。非常非常奇怪:)NULL指针不可能,因为我可以调用count()方法。这真的很奇怪…您是否正在清除同一组合框中由currentIndexChanged()或类似方法调用的插槽?然后尝试延迟它(之前返回事件循环)另请参见此处:当您说函数终止时是什么意思?“s_serviceComboBox->removeItem(i)之后的所有部分都将不被执行您应该重新表述您的问题以询问为什么QComboBox::removeItem()崩溃。答案是您不能调用removeItem()从项目引起的信号调用。这是因为从插槽中破坏信号源不安全。
void refreshServiceComboBox(const std::list<QString> &service) // better QStringList
{
    if (!s_serviceComboBox->isVisible())
        s_serviceComboBox->setVisible(true);

    s_serviceComboBox->clear();
    s_serviceComboBox->addItems(QList::fromStdList(service));
}