QTableView: удаление строки из модели — & gt; Пустая строка и & quot; QSortFilterProxyModel: индекс неверной модели, переданный в mapFromSource & quot;

Я пытаюсь реализовать структуру 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

Что-то я делаю не так?

Заранее спасибо!

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;
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]