2016-01-13 96 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