1

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

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

编辑:

再次嗨,问题是在调用 s_serviceComboBox->addItems 时程序跳转到 connect(Widget, SIGNAL(), Widget, SLOT()) 执行此操作,然后跳转回 s_serviceComboBox->addItems 的位置。 . 在这个跳跃期间,他们覆盖了一些东西。当我通过输入函数使用 s_serviceComboBox->blockSignal(true) 和 s_serviceComboBox->blockSignal(false) 时,它可以正常工作 感谢您的帮助!顺便提一句。我用你的方法来刷新 QComboBox

4

1 回答 1

2

您应该尝试使用清除方法(插槽)QComboBox::clear() 描述的清除组合框

然后简单地附加所有带有QComboBox::addItems 描述 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));
}
于 2013-11-05T09:34:44.007 回答