Russian Qt Forum

Qt => Model-View (MV) => Тема начата: Павел_F. от Февраль 11, 2010, 13:35



Название: Как "заставить" пользователя правильно ввести данные в строку?
Отправлено: Павел_F. от Февраль 11, 2010, 13:35
Есть QTableView  и модель. Есть делегаты на каждую колонку.
Нужно сделать так:
1) Пользователь не может редактировать колонку 1 пока не введет данные в колонку 2 ( уже сделал переопределив edit у QTableView хотя можно и в делегате в createEditor()).
2)Когда пользователь введет данные в колонку два, сразу перейти на колонку 1 и отрыть редактор.
3) Не закрывать редактор и не позволять ничего делать пользователю пока он не введет "правильные" данные в колонку 1.

Вот с пунктами 2, 3 проблемы... Весь мозг себе уже сломал, никак по нормальному не выходит.


Название: Re: Как "заставить" пользователя правильно ввести данные в строку?
Отправлено: asvil от Февраль 11, 2010, 16:56
2. В делегате на колонке два, сделать в нужном месте
emit commitData; emit closeEditor(currentEditor, EditPreviousItem).
Нужное место определяется в зависимости от типа редактора используемого в делегате.
3. Плохой, но вариант. Создать делегат с редактором типа "Диалог-М", где М обозначает модальность изобретения.


Название: Re: Как "заставить" пользователя правильно ввести данные в строку?
Отправлено: Павел_F. от Февраль 11, 2010, 21:27
Со вторым большое спасибо за идею. Правда сделал переопределив closeEditor у QTableView.
А третье остается открытым. Что-то не нравится мне идея, хотя если ничего больше не придумается то так и придется делать.


Название: Re: Как "заставить" пользователя правильно ввести данные в строку?
Отправлено: SABROG от Февраль 11, 2010, 21:35
Не закрывать редактор и не позволять ничего делать пользователю пока он не введет "правильные" данные в колонку 1.

Это глупо. Иногда пользователи не знают что ввести или вообще передумывают что-либо вводить. Правильнее будет выдать MessageBox с сообщением о некорректности введенных данных и предложить две кнопки "ОК", "ОТМЕНА". При ОК возвращаем пользователя в поле редактирования данных, при "ОТМЕНА" затираем данные во второй колонке и закрываем редактирование.


Название: Re: Как "заставить" пользователя правильно ввести данные в строку?
Отправлено: Павел_F. от Февраль 11, 2010, 22:01
Об этом можно говорить когда сам решаешь что хорошо а что плохо. А когда задание звучит "Нужно сделать так" и не подлежит обсуждению остается только думать как это сделать. Хотя нужная составляющая есть. Как вернуть пользователя к вводу данных? Только вот без каких-либо сообщений.


Название: Re: Как "заставить" пользователя правильно ввести данные в строку?
Отправлено: SABROG от Февраль 12, 2010, 10:21
Как вернуть пользователя к вводу данных?

Тупо перейти на нужную ячейку средствами вьюхи и вызвать edit(). Твой заказчик садист или садомазохист. Хочу посмотреть на его лицо, когда он введет неверные данные во вторую колонку, а первая его уже никогда не отпустит пока он её не заполнит.