2011-11-28 224 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