我有一个带有模型的QTableview。我使用此代码在模型中填充虚拟数据

horizontalHeader.append("Name");
horizontalHeader.append("Type");
horizontalHeader.append("Unit price");
horizontalHeader.append("qty");
item00 = new QStandardItem(QString("0"));
item01 = new QStandardItem(QString("0"));
item02 = new QStandardItem(QString("0"));
item03 = new QStandardItem(QString("0"));
QList<QStandardItem*> list;

list.push_back(item00);
list.push_back(item01);
list.push_back(item02);
list.push_back(item03);

for (int i=0; i<100; i++){
      list.at(0)->setText(QString::number(i));
      list.at(1)->setText(QString::number(i));
      list.at(2)->setText(QString::number(i));
      list.at(3)->setText(QString::number(i));
      model.insertRow(i,list);
}

结果应该是一个包含100行和四列的表,并且行的内容是一个数字,但是根据下面的截图,我得到的是第一行填充了数据,而其他行则为空
c&#43;&#43; - 所需的QTableView剂量 View 模型-LMLPHP

最佳答案

您将相同的QStandardItem插入100次,这将导致从第二个开始的每个插入操作出现以下警告:

QStandardItem::insertRows: Ignoring duplicate insertion of item 0xxxxxxxxx

因此,在您的代码中,所有插入操作(从第二个开始)将被忽略,然后QStandardItem(已在第一个操作中插入)被设置为i的新值(这说明了为什么要获得一行99 s)。

相反,您应该为每个行插入使用新的QStandardItem,如下所示:
for (int i=0; i<100; i++){
    QList<QStandardItem*> list;
    list.append(new QStandardItem(QString::number(i)));
    list.append(new QStandardItem(QString::number(i)));
    list.append(new QStandardItem(QString::number(i)));
    list.append(new QStandardItem(QString::number(i)));
    model.insertRow(i,list);
}

09-08 05:33