QAbstractTableModel пустой последняя строка, без сортировки

Обновить

December 2018

Просмотры

310 раз

3

У меня есть моя собственная модель таблицы (DragDropTableModel) подклассы QAbstractTableModel. Внутри я хотел бы, чтобы последняя строка всегда оставаться пустой.

Я его реализации путем добавления InsertRows () в УстановитьДанные () функции:

bool  DragDropTableModel  :: setData (const QModelIndex &index, const QVariant &value, int role)
{ 
...   
  if (role == Qt::EditRole) 
    {
      ...
      if (row == this->rowCount() - 1)
         insertRows(this->rowCount(), 1);
    }
}

После этого у меня есть QSortFilterProxyModel установленный на нем. Проблема: когда я сортировка, последняя строка также сортируется. Но я хочу сделать это не подчиняясь сортировки и стоять на одной и той же последней позиции. Поэтому независимо от того, порядок сортировки (по возрастанию или по убыванию) последняя строка всегда должна быть пустой.

Как это сделать? Может быть, я должен использовать другой подход к реализации «сделать пустую строку» в моей модели?

1 ответы

2

Спасибо, murison. Ваша идея работала. Я настроил значение «EMPTY_ROW» для Qt :: UserRole для элементов пустого ряда. После этого я переопределен LessThan () в QSortFilterProxyModel:

bool MySortFilterProxyModel::lessThan(const QModelIndex &left, const QModelIndex &right) const
{
    if (left.data(Qt::UserRole) == "EMPTY_ROW")
        return (this->sortOrder() == Qt::DescendingOrder);
    else if (right.data(Qt::UserRole) == "EMPTY_ROW")
        return (this->sortOrder() == Qt::AscendingOrder);
    else
        return QSortFilterProxyModel::lessThan(left, right);
}

Так эта строка всегда отображается в нижней части таблицы после сортировки. Кроме того, это nescesary не забудьте очистить Qt :: UserRole, когда эта пустая строка заполняется данными.