由于“重复项目”而将空行插入表中

问题描述 投票:0回答:1

我有一个表视图,需要在多行上有相同的信息,但这些行显示为空,并显示相同的日志消息

'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 );
        }

是否有正确/更有效的方法绕过这种“重复插入”或者我是以错误的方式看待它?

谢谢

qt qtableview qstandarditemmodel
1个回答
0
投票

如果有人像我一样偶然发现了这一点。线索是马雷克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);
}

希望这将有助于下一个发现此问题的人。

© www.soinside.com 2019 - 2024. All rights reserved.