我有一个 QTableView
,它设置了一个 QStandardItemModel
。用户在 View 中的某个索引中编辑数据,然后模型发出 dataChanged()
信号。在我处理 SIGNAL 的 SLOT 中,我有用户更改的 QModelIndex
范围,因此我可以获得用户输入的新值。我怎样才能获得当时的旧值?
最佳答案
经过一些研究,我发现没有标准的方法可以实现这种行为。为了解决这个问题,我必须继承 QStandardItemModel
并像这样重新实现 setData()
:
class RecallModel : public QStandardItemModel
{
public:
RecallModel (QObject * parent = 0) : QStandardItemModel(parent) {}
// Reimplemented
bool setData(const QModelIndex &index, const QVariant &value, int role= Qt::EditRole)
{
// backup the previous model data
if (role == Qt::EditRole || role == Qt::DisplayRole)
QStandardItemModel::setData(index, data(index), Qt::UserRole + 1);
return QStandardItemModel::setData(index, value, role);
}
};
然后我可以访问处理 dataChanged()
信号的插槽中的旧数据:
void SomeObject::handleDataChange(const QModelIndex &topLeft, const QModelIndex &bottomRight)
{
...
const QVariant &vOldData = index.data(Qt::UserRole + 1); // here is the old data
const QVariant &vNewData = index.data(Qt::DisplayRole); // here is the new data
...
}
关于c++ - 处理 QAbstractItemModel::dataChanged() 信号时如何获取旧值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27227896/