C++ Qt:如何将QTableRowItem强制转换为对象?

C++ Qt:如何将QTableRowItem强制转换为对象?,c++,qt,qtablewidget,C++,Qt,Qtablewidget,我是新来的。我想将QTableWidget中的行项目强制转换为对象 到目前为止,我已成功使用QList填充QTableWidget: header.h QList<Inventory> inventories; int row = 0; int rowCount = ui->tableItems->rowCount(); ui->tableItems->insertRow(rowCount); foreach(Inventory inventory,

我是新来的。我想将QTableWidget中的行项目强制转换为对象

到目前为止,我已成功使用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++;
}
在我的表格中,我将使用此选项选择行。

我已经成功地获得了所选的行,是否有一种直接的方法将我的行转换回对象。我来自一个C.Net的背景,我可以很容易地将它转换回像这样的东西,这只是一个例子。我在SO和文档中找不到任何好的解决方案

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

qDebug() << selectedInventory.getPrice();
// 1699.75
另外,我还想从表中所选行的QList中删除一项

谢谢!我是Qt的新手,我对更好的处理方法持开放态度。如果有不清楚的地方,请提出意见,以便我可以更正

我不熟悉QTableWidget本身,但一般来说,您应该在Qt的模型/视图类中使用row方法来访问模型的底层数据行索引,然后根据模型的实现从自定义模型访问原始数据

在您的情况下,类似这样的情况:

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);
其中getInventoryint索引方法是通过其索引访问对象的自定义方法,我猜您有一个来自QAbstractItemModel或其他东西的派生模型,因此请保存数据并在QTableWidget中查看它


这至少是我要做的,您可以阅读更多关于使用Qt进行常规模型/视图编程的信息。

谢谢!我试过Inventory=this->Inventory.atrowIndex;这对我很有效。
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);