Russian Qt Forum
Сентябрь 30, 2024, 18:30 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как заблокировать пользователю ввод данных в ячейках?  (Прочитано 8018 раз)
Ncs
Гость
« : Октябрь 28, 2008, 22:04 »

Как заблокировать пользователю ввод  данных в ячейках?

Конкретно в выбранной строке запретить ввод данных в избранные ячейки.

К примеру, если у вас в первой ячейки стоит «А», тогда данные во второй ячейке пользователь не может редактировать, если изменяются данные в первой ячейки на «B», тогда пользователь может редактировать вторую ячейку.

Штудирую документацию, но пока ничего не нашёл. Косвенно полагаю надо использовать EditTriggers editTriggers () const класса QAbstractItemView с NoEditTriggers, но где это использовать в функциях делегата или ещё где-то не понимаю.

Если кто-то сталкивался с подобной задачей или просто знает, буду весьма признателен за помощь.
Записан
ритт
Гость
« Ответ #1 : Октябрь 28, 2008, 22:36 »

правильнее будет смотреть в сторону
Qt::ItemFlags QAbstractItemModel::flags ( const QModelIndex & index ) const   [virtual]
Записан
Ncs
Гость
« Ответ #2 : Октябрь 28, 2008, 23:16 »

Константин, так понимаю выход в том, что надо создать свою модель и переопределить метод Qt::ItemFlags flags(const QModelIndex &index) const, так как есть только флаг Qt::ItemIsEditable, отвечающий за возможность редактирования, а не отмены или запрета редактирования?
Записан
ритт
Гость
« Ответ #3 : Октябрь 28, 2008, 23:38 »

поскольку запрет на редактирование зависит от определённых данных модели, вполне логично реализовать необходимое именно в модели, а не во вьюхе.
Qt::ItemIsEditable как раз отвечает за возможность редактирования. (0 - запрет, 1 - разрешено)
editTriggers вьюхи - это всего лишь способ перекрыть предложенные моделью разрешения.
Записан
developer
Гость
« Ответ #4 : Октябрь 29, 2008, 13:02 »

У меня была похожая проблема - мне нужно было сделать нередагируемими избранные ячейки.

Код:
table->setColumnCount(model->columnCount());// model - в моем случае ето QSqlTableModel, table - ето QTableWidget который отображал данные из модели
table->setRowCount(model->rowCount());

//Ети два цикла переходят по всех ячейках созданной таблицы, и назначают им свой item
for(int row = 0; row < model->rowCount() ; row++)
for(int col = 0; col < model->columnCount(); col++)
                QTableWidgetItem* item = new QTableWidgetItem(model->data(model->index(row,col)).toString());// здесь мы извлекаем значение из модели
                item->setFlags([color=red][font=Verdana]Qt::ItemIsEditable^2[/font][/color]);// а здесь мы делаем ячейки нередагуемой
table->setItem(row, col, item);
Записан
developer
Гость
« Ответ #5 : Октябрь 29, 2008, 13:06 »

Немного неполучилось , хтел сделать так

item->setFlags(Qt::ItemIsEditable^2);// а здесь мы делаем ячейки нередагуемой

Вот етот Qt::ItemIsEditable^2 и отменяет редагируемость ячейки
Записан
spirit
Гость
« Ответ #6 : Октябрь 29, 2008, 13:43 »

можно в делегате эдитор не создавать  Смеющийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.056 секунд. Запросов: 21.