【问题标题】:How to refresh contents of QCombobox in QTableView如何在 QTableView 中刷新 QCombobox 的内容
【发布时间】:2012-01-07 18:29:48
【问题描述】:

我有 QTableView,其中一列中有 QComboBox。组合框显示来自矢量的数据,当我单击按钮时,该矢量会得到更新。 当我启动应用程序时,组合框会显示向量中的所有项目。现在我按下按钮(向矢量添加更多项目),但组合框不反映矢量中的新数据。它仍然显示旧数据。一旦矢量更新,我也会发出 dataChanged() ,但我没有看到任何变化。 data() 函数确实在模型中调用,它返回向量的所有元素,但 setEditorData 没有在委托中调用。

我是不是错过了什么。

谢谢,

开发

【问题讨论】:

  • 如果我理解正确,您想更改 QComboBox 下拉列表中的项目?如果是这样,您必须手动更新它们,因为它不会跟踪对其设置的项目列表的更改。如果您发布一些代码如何将向量设置为组合框以及如何更新它,将会有所帮助。
  • 是的,我想在更新矢量时更改 QComboBox 中的项目。这就是我所做的,我有一个向量,我在初始化时添加了 3 个项目。在模型的 ::data() 中,我返回包含这些项目的 QStringList。它显示正常。现在,当单击按钮时,我在向量中添加了更多项目。在向量中添加新项目后,我还会发出模型的 dataChanged() 。我想我必须在模型中捕获该信号并更新组合框的内容。让我知道是否有更好的方法来做到这一点。谢谢

标签: qt qtableview qcombobox


【解决方案1】:

那么你需要做类似这个函数的事情:

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

线条

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

是可选的,用于在选择后不更改 currentItem。

【讨论】:

  • 我必须在模型上的 dataChanged() 处理程序中执行此操作?
  • 你必须知道向量发生了变化并且在你看来是最好的。因为我不知道你的代码是什么样子的,所以很难标记出最好的地方。
猜你喜欢
  • 1970-01-01
  • 2011-08-20
  • 1970-01-01
  • 2015-09-30
  • 2018-06-14
  • 2019-11-28
  • 2018-03-27
  • 2012-05-10
  • 2015-03-18
相关资源
最近更新 更多