【发布时间】:2013-11-05 09:26:42
【问题描述】:
我想从 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
【问题讨论】:
-
你说函数终止是什么意思?
-
"s_serviceComboBox->removeItem(i) 之后的所有部分都不会被执行
-
你应该改写你的问题,问为什么 QComboBox::removeItem() 崩溃。答案是您不能从项目引起的信号中调用 removeItem() 调用。那是因为从插槽中破坏信号源是不安全的。