Uga*_*uga 6 c++ qt qabstractitemmodel
我有一个QTableView设置了一个QStandardItemModel.用户在视图中的某个索引中编辑数据,然后模型发出dataChanged()信号.在我处理SIGNAL的SLOT中,我有QModelIndex用户更改的范围,因此我可以获得用户输入的新值.我如何在那时获得旧值?
由于QStandardItemModel是一个简单的模型,因此它不具有具有此功能的信号。如果您想要这样的功能,您可以子类化QAbstractItemModel并拥有自己的自定义类,并实现setData和发出包含旧值和新值的自定义信号。
作为解决方法,您可以将itemChanged的信号连接QStandardItemModel到某个插槽:
connect(model,SIGNAL(itemChanged(QStandardItem*)),this, SLOT(onModelChanged(QStandardItem*)));
Run Code Online (Sandbox Code Playgroud)
并将新值存储为Qt::UserRole模型中,以便下次调用该插槽时将其用作旧值:
void MyClass::onModelChanged(QStandardItem *item)
{
disconnect(model,SIGNAL(itemChanged(QStandardItem*)),this, SLOT(onModelChanged(QStandardItem*)));
QVariant oldValue = item->data(Qt::UserRole);
item->setData(item->data(Qt::DisplayRole), Qt::UserRole); //Store the new value for next use
connect(model,SIGNAL(itemChanged(QStandardItem*)),this, SLOT(onModelChanged(QStandardItem*)));
}
Run Code Online (Sandbox Code Playgroud)