Я пытаюсь реализовать структуру 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 () после некоторых исследований. Перед добавлением этих 2 строк после удаления была пустая строка. Сейчас нет, но когда я удаляю строку 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;
}
Других решений пока нет …