gpt4 book ai didi

c++ - QTableView:从模型中删除行 -> 空行和 "QSortFilterProxyModel: index from wrong model passed to mapFromSource"

转载 作者:太空宇宙 更新时间:2023-11-04 12:42:36 25 4
gpt4 key购买 nike

我正在尝试实现一个 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();
}

效果很好。该行被添加到 View 和数据中(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 行时,我不能先点击第 3+ 行,否则应用程序将崩溃并显示以下错误消息:

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

我做错了什么吗?

提前致谢!

最佳答案

没关系,我想我做错了什么。将 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;
}

关于c++ - QTableView:从模型中删除行 -> 空行和 "QSortFilterProxyModel: index from wrong model passed to mapFromSource",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53430734/

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