为什么QComboBox :: removeItem()崩溃

时间:2013-11-05 09:26:43

标签: qt qcombobox

我想从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]);
   }
}

该方法的第一次调用有效但在secound调用时它不起作用。功能 通过调用终止“s_serviceComboBox-&gt; removeItem(i);” s_serviceComboBox是一个类元素,是用new创建的。 有人知道解决方案吗?

编辑:

你好, 问题是在调用s_serviceComboBox-&gt; addItems时程序跳转到连接(Widget,SIGNAL(),Widget,SLOT())执行此操作并在此跳转回s_serviceComboBox-&gt; addItems的位置...在这次跳跃中,他们会覆盖一些东西当我使用s_serviceComboBox-&gt; blockSignal(true)时输入函数和s_serviceComboBox-&gt; blockSignal(false)它可以解决你的问题 感谢帮助! 顺便说一句。我用你的方法来刷新QComboBox

1 个答案:

答案 0 :(得分:2)

你应该尝试使用方法(插槽)QComboBox::clear() description clear

清除组合框

然后只需使用QComboBox::addItems description addItems

附加所有项目
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));
}