QComboBox动态项目列表

QComboBox dynamic list of items

本文关键字:列表 项目 动态 QComboBox      更新时间:2023-10-16

我有两个QTableWidget。我们称它们为Tab1Tab2Tab1的一列包含QComboBox e,其中它们的项目来自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 s是这样填充的:

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似乎是一个很好的模型,尽管您当然可以在需要时使用更复杂的模型。