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