如何刷新QTableView中QCombobox的内容
我有QTableView其中的一列有QComboBox。当我点击一个按钮时,组合框正在显示来自一个向量的数据。 当我启动应用程序时,组合框将显示矢量中的所有项目。现在我按下按钮(向矢量添加更多项目),但组合框不反映矢量中的新数据。它仍然显示旧数据。一旦矢量更新,我也会发射dataChanged(),但我没有看到任何更改。 data()函数在返回vector的所有元素的模型中确实获得调用,但setEditorData在委托中没有获得调用。如何刷新QTableView中QCombobox的内容
我错过了什么。
感谢,
开发
然后,你需要做的是这样的功能:
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选择后。
我必须在模型的dataChanged()处理程序中执行此操作吗? – dev
你必须在那里你知道,矢量改变,最好在你看来。因为我不知道你的代码是什么样的,所以很难标记出最好的地方。 – firescreamer
感谢firescreamer。 – dev
如果我理解正确,您想更改QComboBox下拉列表中的项目?如果是这样,您必须手动更新它们,因为它不会跟踪对其设置的项目列表的更改。如果你发布一些代码,你会如何设置矢量到comboBox以及如何更新它,这将有所帮助。 – firescreamer
是的,我想在矢量更新时更改QComboBox中的项目。 这是我做的,我有一个向量,我在初始化时添加3个项目。在模型的:: data()中,我返回包含这些项目的QStringList。它显示正常。 现在,我只需点击按钮即可在矢量中添加更多项。我还在向量中添加新项目之后发出模型的dataChanged()。 我想我将不得不在模型中捕获该信号并更新组合框的内容。让我知道是否有更好的方法来做到这一点。谢谢 – dev