C++ Qt:如何将QTableRowItem强制转换为对象?
我是新来的。我想将QTableWidget中的行项目强制转换为对象 到目前为止,我已成功使用QList填充QTableWidget: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,
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);