我有两个QTableWidget
。我们称它们为 Tab1
和 Tab2
。 Tab1
的一列包含 QComboBox
es,其中它们的项目是来自 Tab2
的行。当 Tab2
的元素被修改(添加/删除/编辑)时,我希望所有 QComboBoxes
都更新。
Tab1概念
LineNo | Some Text | Select |
1 | QString | QComboBox |
2 | QString | QComboBox |
3 | QString | QComboBox |
| ... | ... |
n | QString | QComboBox |
Tab2概念
LineNo | Some Text |
1 | QString |
2 | QString |
3 | QString |
| ... |
n | QString |
目前QComboBoxe
是这样填充的:
QStringList s; // List filled with data from Tab2
QTableWidget *tw = (QTableWidget*) ui->Tabspace->currentWidget()->childAt(10, 10);
QComboBox *names = new QComboBox();
names->addItems(s);
tw->setItem(row, 0, new QTableWidgetItem());
tw->setCellWidget(row, 0, names);
每次我向 Tab1 添加行时都会启动此代码
最简单的方法是在 Tab2 的项目内容发生变化时更改每个 QComboBox
。我的问题是:
有没有更好的方法来实现它?也许有某种方法可以将指针传递给 addItems()
或只修改一个 QComboBox
并克隆它?
最佳答案
使用QComboBox::setModel()与所有组合框共享一个模型。在选项卡 2 中更改任何内容时,只需修改模型,组合框就会自动更新。 对于您的用例,它似乎是 QStringListModel是一个很好的模型,但如果需要,您当然可以使用更复杂的模型。
关于c++ - QComboBox动态项目列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22699694/