由于“重复项目”而将空行插入表中
Posted
技术标签:
【中文标题】由于“重复项目”而将空行插入表中【英文标题】:Inserting empty rows into table due to 'duplicate items' 【发布时间】:2013-10-31 10:34:56 【问题描述】:我有一个表格视图,它需要多行的相同信息,但是这些行一直显示为空,并且出现相同的日志消息
'Ignoring duplicate insertion of item'
基本上,我会遍历模型设置以包含所有信息,并获取每个索引处的值以填充附加到表的另一个模型。 每次循环迭代时,我都尝试将每个索引分配给一个变量(这似乎有点矫枉过正)
QString var1, var2, var3;
for ( int row = 0; row < m_infoModel->rowCount(); ++row )
item = new QStandardItem;
var1 = m_infoModel->data( m_infoModel->index( row, 0 ) ).toString();
item->setText( var1 );
m_displayModel->setItem( row, 1, item );
item = new QStandardItem;
var2 = m_infoModel->data( m_infoModel->index( row, 1 ) ).toString();
item->setText( var2 );
m_displayModel->setItem( row, 2, item );
item = new QStandardItem;
var3 = m_infoModel->data( m_infoModel->index( row, 2 ) ).toString();
item->setText( var3 );
m_displayModel->setItem( row, 3, item );
是否有一种正确/更有效的方法来解决这种“重复插入”,还是我看错了?
谢谢
【问题讨论】:
如果您需要两个表显示相同的数据,只需对两个表视图使用相同的模型即可。我误会了什么? 不,我需要从同一个模型中插入数据是同一个表。.. :/ 但我有包含相同列值的行,例如第 1 - 1 行、Bla、SameStuff、第 2 行- 1,Bla(不同的东西),SameStuff。希望这是有道理的 我已经检查了 qt 代码。添加已经有父项的项目时会打印此警告。因此,您显示的代码不会生成此警告。此外,这不是警告的完整内容,因此请显示完整版本。QStandardItem::insertRows: Ignoring duplicate insertion of item 0x29a9850
4 年后,我在 Python 上偶然发现了同样的问题。你找到解决办法了吗?
【参考方案1】:
以防有人像我一样偶然发现这一点。线索在 Marek R 关于父母的回答中。当您将一个项目插入一个模型并且该项目已经在另一个模型中时,它将导致此问题。 要修复它,您需要创建一个新的 QStandardItem 来封装现有 QStandardItem 中的数据。
希望我如何修复它是有意义的。
这是我遇到相同问题的代码(将新的文本行从 m_logModel 复制到 m_model):
for (int i = first; i <= last; i++)
QList<QStandardItem*> nextRow;
for (int j = 0; j < m_logModel->columnCount(); j++)
nextRow << m_logModel->item(i, j);
m_model->appendRow(nextRow);
修改后的代码使其按预期工作:
for (int i = first; i <= last; i++)
QList<QStandardItem*> nextRow;
for (int j = 0; j < m_logModel->columnCount(); j++)
nextRow << new QStandardItem(m_logModel->item(i, j)->text());
m_model->appendRow(nextRow);
希望这将帮助下一个发现此问题的人。
【讨论】:
以上是关于由于“重复项目”而将空行插入表中的主要内容,如果未能解决你的问题,请参考以下文章