Qt 5.5使用C++,从COMBOBOX中移除和项正在移除项目之前的所有项目

Qt 5.5使用C++,从COMBOBOX中移除和项正在移除项目之前的所有项目,c++,qt,combobox,qt5.5,C++,Qt,Combobox,Qt5.5,在一个程序中,6个combobox都有相对数据,一旦选择了一个索引,其他人就不能选择它,因此我只是将它从其他人的索引中删除,但是实际上,出于某种原因,它会删除索引以及之前的所有索引。知道为什么吗 void AssignStatsWindow::on_comboBox_currentIndexChanged() { ui->comboBox_2->removeItem(ui->comboBox->currentIndex()); //these should re

在一个程序中,6个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是一个交换了索引并触发代码的对话框,comboBox_2到6是其他需要调整并“过度删除”索引的对话框。一旦第一个正确运行,就可以很容易地为组合框的其余部分构建索引交换的其余部分。任何帮助都将不胜感激

来自:

从组合框中删除给定索引处的项。如果删除索引,则此操作将更新当前索引

实际上,由于某种原因,它会删除索引以及之前的所有索引。知道为什么吗

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);
        }
    }
}

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

我明白了,因此我的for循环在结束时会导致更多的触发器,因为索引正在更改。这是有道理的。是时候考虑一种新的方法了。@StackAttack我需要更多地了解所有信号和插槽是如何连接的,但是每个QObject上都有一个函数,可以启用和禁用该函数来处理类似的情况。我通过多读一点来设法弄明白这一点-如果当前项组合框更改、currentIndexChanged和Activate。currentIndexChanged始终发出,无论更改是通过编程方式还是通过用户交互完成的,而Activate仅在更改是由用户交互引起时发出。-因此,解决方案是简单地使用activated而不是currentIndexChanged和wala,算法将继续工作。谢谢你的帮助!