2016-09-18 15 views
1

我有一个QTableview模型。我填充模型中的虚拟数据使用此代码根据需要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

+0

你可能想'model.insertRow(I,变换(列表,[](自动X){返回X- > clone();}));' –

回答

3

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

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

所以,在你的代码,所有的插入操作(从开始第二个)将被忽略,然后QStandardItem(已在第一个操作中插入)被设置为新的值i(这就解释了为什么你会得到一行99 s)。

相反,你应该为每个行插入使用新QStandardItem S,这样的:

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); 
} 
+0

非常感谢您的帮助 – test11

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

甚至与内环创建的四个项目里面的物品。