QTableView:从模型中删除行->空行,并且“ QSortFilterProxyModel:来自错误模型的索引传递给mapFromSource”

时间:2018-11-22 12:10:50

标签: c++ qt viewmodel qtableview qsortfilterproxymodel

我正在尝试实现qTableView结构。

这是我的代码的一部分:

m_model = new PatientModel(this); //This is my QAbstractTableModel subclass
m_proxy = new QSortFilterProxyModel(this);
m_proxy->setSourceModel(m_model);

要追加一行(我想显示患者对象):

void PatientModel::append(Patient* patient) {
   beginInsertRows(QModelIndex(), m_data.count(), m_data.count());
        m_data.append(patient);
   endInsertRows();
}

哪个工作正常。该行将添加到视图和数据中(m_data是

的QList

要删除一行,我已经尝试了几件事

bool PatientModel::removeRows(int row, int count, const QModelIndex &parent)
{
    Q_UNUSED(parent);
    this->layoutAboutToBeChanged();
    beginRemoveRows(QModelIndex(), row, row+count-1);
        m_data.removeAt(row);
    endInsertRows();
    this->layoutChanged(); //force refresh, keine Ahnung

    return true;
}

经过一些研究,我添加了layoutAboutTobeChanged()和layoutChanged()。在添加这两行之前,删除后有一个空行。现在没有了,但是当我删除第3行时,例如我无法再单击Line 3+,否则应用程序将崩溃并显示以下错误消息:

QSortFilterProxyModel: index from wrong model passed to mapFromSource
Segmentation fault: 11

我在做错什么吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

没关系,我想我做错了什么。将RemoveRows更改为此,现在可以正常工作:

bool PatientModel::removeRows(int row, int count, const QModelIndex &parent)
{
    Q_UNUSED(parent);
    beginRemoveRows(QModelIndex(), row, row+count-1);
     for (int i=0; i < count; ++i) {
         m_data.removeAt(row);
     }
     endRemoveRows();

    return true;
}