2016-01-13 5 views
1

Работа с программой, в которой 6 combobox имеют относительные данные, после выбора индекса другие не должны выбирать, поэтому я просто удаляю его из индекса на другие, но на практике он удаляет индекс и каждый индекс перед ним по какой-то причине. Любая идея почему?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 являются другими, которые необходимо отрегулировать и являются «более удаляющим» индексами. Как только я получу этот первый, правильно работающий, нужно легко собрать оставшуюся часть indexChanged для остальной части comboBox. Любая помощь будет принята с благодарностью.

ответ

1

От Qt 5.5 documentation:

Удаляет элемент с заданным индексом из выпадающего списка. Это обновит текущий индекс, если индекс будет удален.


на практике это удаление индекса плюс каждый индекс перед ней по некоторым причинам. Любая идея почему?

Кажется, что работа по удалению элемента выполняется в слоте, который отвечает на сигнал currentIndexChanged. В приведенной выше документации указано, что удаление элемента изменит текущий индекс поля со списком, что приведет к многократному срабатыванию слота, тем самым удалив много элементов.

+0

Я вижу, поэтому мой цикл for в конце вызывает более триггеры, так как индекс меняется. В этом есть смысл. Пора подумать о новом способе этого. – StackAttack

+0

@StackAttack Мне нужно знать немного больше о том, как все сигналы и слоты подключены, но есть ['blockSignals'] (http://doc.qt.io/qt-5/qobject.html#blockSignals) на каждом 'QObject', который может быть включен и отключен для обработки ситуаций, подобных этому. –

+0

Мне удалось понять это, прочитав немного больше: «При изменении текущего элемента combobox происходит следующее: currentIndexChanged() и активировано(). CurrentIndexChanged() всегда испускается независимо от того, было ли изменение выполнено программно или путем взаимодействия пользователя, а активированный() выдается только тогда, когда изменение вызвано взаимодействием пользователя ». - Таким образом, решение состояло в том, чтобы просто использовать active() вместо currentIndexChanged() и wala, алго будет работать в будущем. Спасибо за вашу помощь! – StackAttack