gpt4 book ai didi

c++ - 处理 QAbstractItemModel::dataChanged() 信号时如何获取旧值?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:34:23 27 4
gpt4 key购买 nike

我有一个 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com