QTableView剂量模型根据需要查看值

时间:2016-09-18 11:58:40

标签: c++ qt

我有一个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列的表,行的内容是一个数字,但我得到的第一行填充了数据,而其他行只是空的,如下面的屏幕截图所示 enter image description here

2 个答案:

答案 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);
}

甚至用内循环来创建四个项目。