如何在QTableView中未显示的QAbstractTableModel中存储信息

时间:2019-02-08 20:04:13

标签: qt qtableview tablemodel

我已经按照Address Book Example创建了自己的TableModel和TableView。

我的实现与本示例非常相似,不同之处在于表中的每个条目都是具有关联ID的Patient结构。该ID没有显示在TableView中,但是在进行修改后,我使用该ID将更改保存在文件系统中。

这是MyPatient结构

struct MyPatient
{
    qlonglong id;
    QString firstName;
    QString lastName;
    QString dob;
    QString sex;
    QString height;
    QString weight;
    QString dateModified;

    bool operator==(const MyPatient &other) const
    {
        return id == other.id;
    }
};

这是我的addPatient()方法的主体,用于将患者添加到表中:

insertRows(0, 1, QModelIndex());

QModelIndex index = this->index(0, 0, QModelIndex());
setData(index, patient.firstName, Qt::EditRole);
index = this->index(0, 1, QModelIndex());
setData(index, patient.lastName, Qt::EditRole);
index = this->index(0, 2, QModelIndex());
setData(index, patient.dob, Qt::EditRole);
index = this->index(0, 3, QModelIndex());
setData(index, patient.sex, Qt::EditRole);
index = this->index(0, 4, QModelIndex());
setData(index, patient.height, Qt::EditRole);
index = this->index(0, 5, QModelIndex());
setData(index, patient.weight, Qt::EditRole);
index = this->index(0, 6, QModelIndex());
setData(index, patient.dateModified, Qt::EditRole);

在当前的实现中,当我调用data()方法检索患者时,ID字段为0,因为该表未存储该值。

如何将这个ID值存储在表中而不在TableView中将其显示为自己的列?

我尝试将另外两行添加到addPatient方法中:

    index = this->index(0, 7, QModelIndex());
    setData(index, patient.id, Qt::EditRole);

但是setData将索引值检测为无效,因为表的columnCount为7,这就是QTableView中应该出现多少列。

谢谢,请让我知道我的问题是否可以澄清。

0 个答案:

没有答案