2016-01-13 126 views
1

在6个组合框具有相关数据的程序上工作时,一旦选择了索引,其他人就不应该选择它,因此我只是将其从其他索引中的索引中删除,但实际上它会删除索引以及出于某种原因之前的每个索引。任何想法为什么?Qt 5.5使用C++,从ComboBox中删除项目以及删除项目前的所有项目

void AssignStatsWindow::on_comboBox_currentIndexChanged() 
{ 
    ui->comboBox_2->removeItem(ui->comboBox->currentIndex()); //these should remove 1 index but removes many 
    ui->comboBox_3->removeItem(ui->comboBox->currentIndex()); 
    ui->comboBox_4->removeItem(ui->comboBox->currentIndex()); 
    ui->comboBox_5->removeItem(ui->comboBox->currentIndex()); 
    ui->comboBox_6->removeItem(ui->comboBox->currentIndex()); 

    for (int i = ui->comboBox->count(); i >= 0; --i) //removes all but newly selected index, seems to be working fine 
    { 
     if (i != ui->comboBox->currentIndex()) { 
      ui->comboBox->removeItem(i); 
     } 
    } 
} 

comboBox是具有indexChanged和触发码之一,通过comboBox_2 6是需要调整和是“过度去除”索引的其他。一旦我得到第一个正确的工作,应该很容易为comboBoxES的其余部分构建indexChanged的其余部分。任何帮助将不胜感激。

回答

1

Qt 5.5 documentation

从ComboBox指定索引处的项目。如果索引被删除,这将更新当前索引。


在实践中被删除索引加上之前的每指数的某些原因。任何想法为什么?

似乎删除项目的工作正在响应currentIndexChanged信号的插槽中执行。上面的文档说明删除一个项目将改变组合框的当前索引,这将导致该插槽多次被触发,从而移除很多项目。

+0

我明白了,所以我的for循环在结尾引起更多的触发器,然后索引正在改变。这就说得通了。现在想想一个新的方法来做到这一点。 – StackAttack

+0

@StackAttack我需要更多地了解所有信号和插槽如何连接,但有一个['blockSignals'](http://doc.qt.io/qt-5/qobject.html#blockSignals )每个'QObject'上的函数都可以被启用和禁用,以处理类似的情况。 –

+0

我设法通过读取更多的信息 - “如果组合框的当前项目发生变化,会发出两个信号currentIndexChanged()和activated()。currentIndexChanged()总是发出,无论这些变化是以编程方式完成还是通过用户交互,而激活()仅在更改是由用户交互引起时才发出。“ - 所以解决方案是简单地使用activated()而不是currentIndexChanged()和wala,算法将继续前进。谢谢你的帮助! – StackAttack