c++ - Qcombobox在C++ Qt中删除和添加项目
问题描述
在 Qtableview2 第 1 列中创建一个组合框并从 Qtableview1 column1 传递值,因此我将 column1 table1 值存储在 Qstringlist 中并传递给组合框
void cymodel::rowvalues() {
QAbstractItemModel* table1 = ui.tableView->model();
QAbstractItemModel* table2 = ui.tableView_2->model();
QStringList colvallist1;
for (int r = 0, maxI = table1->rowCount(); r < maxI; ++r)
colvallist1.append(table1->data(table1->index(r, 0)).toString());//store value in stringlist
for (int i = 0, maxI = table2->rowCount(); i < maxI; ++i)//for all rows
{
const QModelIndex idx = table2->index(i, 1);
QComboBox* combo = qobject_cast<QComboBox*>(ui.tableView_2->indexWidget(idx));
if (!combo)
{
combo = new QComboBox(); // make combo
ui.tableView_2->setIndexWidget(idx, combo);// add combo
}
// combo->model()->removeRows(0, combo->count(), combo->rootModelIndex());
colvallist1.removeDuplicates(); // clear duplicates in colvallist1
colvallist1.removeAll(QString("")); //remove empty row data
combo->setPlaceholderText(QString(" "));
combo->addItems(colvallist1);
}
}
connect(ui.tableView->model(), &QAbstractItemModel::dataChanged, this,
&cymodel::rowvalues);
每次使用 removerows() 都会删除所有项目,如果我在 column0 table1 中添加了一些值,然后在组合框中选择并再次在 table1 Column0 中添加值,那么组合框选择消失但如果我不使用 removerows() 那么当我' m 将新项目添加到组合框,然后添加多次,例如添加 2 个值,然后我在 table1 col 中再添加 2 个,然后在组合框中它变为 4
那么,如何添加出现在 colvallist1 中但尚未出现在组合中的那些并删除那些未出现在 colvallist1 中的那些?
谢谢请帮忙!!
解决方案
thnks,,,我解决了这个问题..删除组合框中不在 colvallist1 中的项目..不改变选择这里是代码 -
void cymodel::rowvalues() {
QAbstractItemModel* table1 = ui.tableView->model();
QAbstractItemModel* table2 = ui.tableView_2->model();
QStringList colvallist1;
for (int r = 0, maxI = table1->rowCount(); r < maxI; ++r)
colvallist1.append(table1->data(table1->index(r, 0)).toString());//store value in stringlist
for (int i = 0, maxI = table2->rowCount(); i < maxI; ++i)//for all rows
{
const QModelIndex idx = table2->index(i, 1);
QComboBox* combo1 = qobject_cast<QComboBox*>(ui.tableView_2-
>indexWidget(idx));
if (!combo1)
{
combo1 = new QComboBox(); // make combo
ui.tableView_2->setIndexWidget(idx, combo);// add combo
}
colvallist1.removeDuplicates(); // clear duplicates in colvallist1
colvallist1.removeAll(QString("")); //remove empty row data
combo1->setPlaceholderText(QString(" "))
QString selected = combo1->currentText();
int indx = combo1->currentIndex();
combo1->clear();
combo1->addItems(colvallist1);
combo1->findData(selected);
combo1->setCurrentIndex(indx);
combo1->setCurrentText(selected);
}
推荐阅读
- javascript - JavaScript 将前 5 个字符替换为 *
- ruby - 简单的程序,但非常卡住——Ruby 中的循环
- raspberry-pi3 - 尝试使用 DFRobot 红外摄像头寻找红外灯
- c++ - qt.bluetooth:虚拟后端运行。Qt 蓝牙模块在 Raspbian 上不起作用
- functional-programming - 函数式编程中的并行函数组合
- vue.js - 如何使用 vue svg loader 继承 svg 的 css 属性
- python - 为什么这个 de Bruijn 代码的最后几位总是返回 0
- docker - 是否可以从 Azure Pipelines 容器作业中运行 Docker 命令?
- jquery - 检查页面滚动何时到达多个不同的 div,动画计数器从 0 到文本元素
- python - “python中有没有像minifs和maxifs这样比较两个不同数据帧的函数