2011-11-28 227 views
1

我有QTableView其中的一列有QComboBox。當我點擊一個按鈕時,組合框正在顯示來自一個向量的數據。 當我啓動應用程序時,組合框將顯示矢量中的所有項目。現在我按下按鈕(向矢量添加更多項目),但組合框不反映矢量中的新數據。它仍然顯示舊數據。一旦矢量更新,我也會發射dataChanged(),但我沒有看到任何更改。 data()函數在返回vector的所有元素的模型中確實獲得調用,但setEditorData在委託中沒有獲得調用。如何刷新QTableView中QCombobox的內容

我錯過了什麼。

感謝,

開發

+0

如果我理解正確,您想更改QComboBox下拉列表中的項目?如果是這樣,您必須手動更新它們,因爲它不會跟蹤對其設置的項目列表的更改。如果你發佈一些代碼,你會如何設置矢量到comboBox以及如何更新它,這將有所幫助。 – firescreamer

+0

是的,我想在矢量更新時更改QComboBox中的項目。 這是我做的,我有一個向量,我在初始化時添加3個項目。在模型的:: data()中,我返回包含這些項目的QStringList。它顯示正常。 現在,我只需點擊按鈕即可在矢量中添加更多項。我還在向量中添加新項目之後發出模型的dataChanged()。 我想我將不得不在模型中捕獲該信號並更新組合框的內容。讓我知道是否有更好的方法來做到這一點。謝謝 – dev

回答

4

然後,你需要做的是這樣的功能:

void updateComboBox(QComboBox *comboToUpdate, const QStringList & list) 
{ 
    QString curentText = comboToUpdate->currntText(); 
    comboToUpdate->clear(); 
    comboToUpdate->insertItems(list); 
    comboToUpdate->setCurrentIndex(comboToUpdate->findText(currentText)); 
} 

QString curentText = comboToUpdate->currntText(); 
... 
comboToUpdate->setCurrentIndex(comboToUpdate->findText(currentText)); 

是可選的,用於不改變CURRENTITEM選擇後。

+0

我必須在模型的dataChanged()處理程序中執行此操作嗎? – dev

+0

你必須在那裏你知道,矢量改變,最好在你看來。因爲我不知道你的代碼是什麼樣的,所以很難標記出最好的地方。 – firescreamer

+0

感謝firescreamer。 – dev