2017-05-19 80 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