Russian Qt Forum

Qt => Вопросы новичков => Тема начата: lexaaleynik от Февраль 03, 2016, 11:46



Название: Управление редактированием отдельных колонок в qtableview.
Отправлено: lexaaleynik от Февраль 03, 2016, 11:46
Имеется собственная модель, построенная на базе QAbstractItemModel.
Эта модель отображается в таблице построенной на базе QTableView.
Запретить/разрешить редактирование всех ячеек таблицы можно установкой соответствующего флага в методе

Код:
QTableView::setedittriggers(QAbstractItemView::NoEditTriggers)

А вот как управлять возможностью редактирования ячеек колонки?
Можно конечно через делегат явно возвращать старое значение в Item после закрытия эдитора ячейки. Но хотелось бы чтобы createEditor вообще не вызывался.


Название: Re: Управление редактированием отдельных колонок в qtableview.
Отправлено: PimenS от Февраль 03, 2016, 12:34
Переопределить у модели Qt::ItemFlags flags(const QModelIndex &index = QModelIndex()) const;


Название: Re: Управление редактированием отдельных колонок в qtableview.
Отправлено: lexaaleynik от Февраль 03, 2016, 13:27
Переопределить у модели Qt::ItemFlags flags(const QModelIndex &index = QModelIndex()) const;

Спасибо, это то что надо. Переопределил так:
Код:
Qt::ItemFlags flags(const QModelIndex &index) const
{
   if(index.column() > 4) // условие определяющие список столбцов для назначения соответствующих флагов
      return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable;
   else
      return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
}

Всё работает.