Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Ncs от Октябрь 28, 2008, 22:04



Название: Как заблокировать пользователю ввод данных в ячейках?
Отправлено: Ncs от Октябрь 28, 2008, 22:04
Как заблокировать пользователю ввод  данных в ячейках?

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

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

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

Если кто-то сталкивался с подобной задачей или просто знает, буду весьма признателен за помощь.


Название: Re: Как заблокировать пользователю ввод данных в ячейках?
Отправлено: ритт от Октябрь 28, 2008, 22:36
правильнее будет смотреть в сторону
Qt::ItemFlags QAbstractItemModel::flags ( const QModelIndex & index ) const   [virtual]


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


Название: Re: Как заблокировать пользователю ввод данных в ячейках?
Отправлено: ритт от Октябрь 28, 2008, 23:38
поскольку запрет на редактирование зависит от определённых данных модели, вполне логично реализовать необходимое именно в модели, а не во вьюхе.
Qt::ItemIsEditable как раз отвечает за возможность редактирования. (0 - запрет, 1 - разрешено)
editTriggers вьюхи - это всего лишь способ перекрыть предложенные моделью разрешения.


Название: Re: Как заблокировать пользователю ввод данных в ячейках?
Отправлено: developer от Октябрь 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);


Название: Re: Как заблокировать пользователю ввод данных в ячейках?
Отправлено: developer от Октябрь 29, 2008, 13:06
Немного неполучилось , хтел сделать так

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

Вот етот Qt::ItemIsEditable^2 и отменяет редагируемость ячейки


Название: Re: Как заблокировать пользователю ввод данных в ячейках?
Отправлено: spirit от Октябрь 29, 2008, 13:43
можно в делегате эдитор не создавать  ;D