我正在尝试实现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
我在做错什么吗?
谢谢!
答案 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;
}