2017-05-19 162 views
0

我是Qt的新手。我想在QTableWidget中將行項目轉換爲對象。Qt:如何將QTableRowItem轉換爲對象?

到目前爲止,我已經管理與QList作填充QTableWidget的:

header.h 
QList<Inventory> inventories; 

int row = 0; 
int rowCount = ui->tableItems->rowCount(); 

ui->tableItems->insertRow(rowCount); 

foreach(Inventory inventory, this->inventories) 
{ 

    QTableWidgetItem *code = new QTableWidgetItem(inventory.getName()); 
    QTableWidgetItem *name = new QTableWidgetItem(inventory.getCode()); 
    QTableWidgetItem *price = new QTableWidgetItem(GlobalFunctions::doubleToMoney(this, inventory.getPrice())); 

    ui->tableItems->setItem(row,0,code); 
    ui->tableItems->setItem(row,1,name); 
    ui->tableItems->setItem(row,2,price);  

    row++; 
} 

在我的表,我將使用這個選擇行。 enter image description here

void CreateSalesWindow::removeItem() 
{ 
    qDebug() << "Remove Item" << ui->tableItems->currentIndex().column(); 
    this->salesdetails.removeAt(ui->tableItems->currentIndex().column() - 1); 
    this->refreshItemList(); 
} 

我設法得到選定行,有投行我回對象一個簡單的方法。我來自C#.Net背景,我可以很容易地將其轉換回像這樣的東西(只是一個例子)。我在SO和文檔中找不到任何好的解決方案。

Inventory selectedInventory = (Inventory) ui->tableItems->selectedItem().getValue(); 

qDebug() << selectedInventory.getPrice(); 
// 1699.75 

PS。我也想從表中選定的行中刪除QList <>中的一個項目。

謝謝!我對Qt很陌生,在處理這個問題上我有更好的方法。如果有什麼不清楚的地方,請發表評論,以便我能糾正它。

回答

1

我對QTableWidget本身並不熟悉,但一般來說,您應該使用row方法和Qt的模型/視圖類來訪問模型的底層數據行索引,然後從您的自定義模型中訪問原始數據(取決於你的模型的實現)。

在你的情況是這樣的:

int rowIndex = ui->tableItems->selectedItems().first().row(); 
// or this should also work to get the current index directly 
int rowIndex = ui->tableItems->currentIndex().row(); 
Inventory *selectedInventory = ui->tableItems->model()->getInventory(rowIndex); 

其中getInventory(int index)方法是通過它的索引來訪問你的對象的自定義方法(我想你有一個派生模型從QAbstractItemModel或東西,以便保存數據和在QTableWidget中查看它)。

這是至少我會做什麼,你可以閱讀更多關於通用模型/視圖編程與Qt在Introduction to Model/View Programming

+0

謝謝!我試過庫存庫存= this-> inventories.at(rowIndex);它爲我工作。 – Binsoi