我有一个带有模型的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行和四列的表,并且行的内容是一个数字,但是根据下面的截图,我得到的是第一行填充了数据,而其他行则为空
最佳答案
您将相同的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);
}