我有一个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行和4列的表,行的内容是一个数字,但我得到的第一行填充了数据,而其他行只是空的,如下面的屏幕截图所示
答案 0 :(得分:3)
您要插入相同的QStandardItem
一次100次,这会导致每次插入操作出现以下警告,从第二次开始:
QStandardItem::insertRows: Ignoring duplicate insertion of item 0xxxxxxxxx
因此,在您的代码中,将忽略所有插入操作(从第二个开始),然后将QStandardItem
(已在第一个操作中插入)设置为新值{{1 (这解释了为什么你会得到一行i
)。
相反,您应该为每个行插入使用新的99
,如下所示:
QStandardItem
答案 1 :(得分:1)
您需要在循环中创建项目
for (int i = 0; i < 100; ++i) {
QList<QStandardItem*> list;
list << new QStandardItem(QString::number(i));
list << new QStandardItem(QString::number(i));
list << new QStandardItem(QString::number(i));
list << new QStandardItem(QString::number(i));
model.appendRow(list);
}
甚至用内循环来创建四个项目。