QTableView: удаление строки из модели -> пустая строка и «QSortFilterProxyModel: индекс из неправильной модели, переданной в mapFromSource» - PullRequest
0 голосов
/ 22 ноября 2018

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

Есть ли что-то, что я делаю не так?

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

1 Ответ

0 голосов
/ 22 ноября 2018

Неважно, наверное, я что-то не так сделал.Изменено 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...