Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > [Qt] QTableView: запрет редактирования колонки


Автор: ShogunC 2.2.2010, 16:46
Извините за тупой вопрос, но потратил целы день и не смог найти решения на простой вопрос(((
Как простым способом запретить редактирование колонки в QTableView.
Вроде обыденная вещь, но простого решения не накопал  smile 
Криво косо сделать могу, но это уже принципиально для меня увидеть тривиальное и банальное решение((((

Автор: Sovereign 2.2.2010, 17:09
ну дык в модели для tableWidget реализован метод 

bool setData(const QModelIndex& index,  const QVariant&    value, int nRole);
так и не давай редактировать данные, где index.column() равен нередактируемой колонке

Автор: panukov 2.2.2010, 20:09
если полностью таблицу, то

Код

QTableView* tbl = new QTableView;
tbl->setEditTriggers(QAbstractItemView::NoEditTriggers);

Автор: ShogunC 2.2.2010, 22:00
Я это все понимаю, я знаю как запретить редактировать колонку...
Но должен быть тривиальный - самый простой способ запретить редактировать колонку, мне интересно как?????  smile 

Автор: KrupaKarlo 4.3.2010, 09:54
если модель данных QStandardItemModel, то для элементов нужной колонки  задавай свойство 

void QStandardItem::setEditable ( bool editable )

Автор: AntoshaMarchenko 4.3.2010, 13:13
а я переопределял mouseDoubleClickEvent и душил двойной клик, если мышь над неугодной ячейкой

Автор: fancy86 30.3.2011, 14:26
Можно определить свой класс нередактируемого делегата, наследника класса QStyledItemDelegate, в котором переопределен метод createEditor() и он возвращает 0.
Пример:
Код

QWidget* NotEditableDelegate::createEditor ( QWidget*, const QStyleOptionViewItem&, const QModelIndex& ) const
{
    return 0;
}

Затем устанавливаем объект этот класса в качестве делегата для нужной нам колонки QTableView:
Код

_ui->tableView->setItemDelegateForColumn(columnNum, new NotEditableDelegate(this));

В результате, колонка QTableView, для которой установлен этот делегат, станет нередактируемой, а остальные колонки останутся редактируемые.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)