我有一个表视图,需要在多行上显示相同的信息,但这些行显示为空并显示相同的日志消息
'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 );
}
是否有正确/更有效的方法来解决这个'重复插入',或者我是以错误的方式看待它?
由于
答案 0 :(得分:0)
以防有人像我那样偶然发现这一点。线索来自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);
}
希望这对下一个发现此问题的人有所帮助。