2016-09-18 44 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); 
} 

甚至與內環創建的四個項目裏面的物品。