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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как "заставить" пользователя правильно ввести данные в строку?  (Прочитано 3825 раз)
Павел_F.
Гость
« : Февраль 11, 2010, 13:35 »

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

Вот с пунктами 2, 3 проблемы... Весь мозг себе уже сломал, никак по нормальному не выходит.
Записан
asvil
Гость
« Ответ #1 : Февраль 11, 2010, 16:56 »

2. В делегате на колонке два, сделать в нужном месте
emit commitData; emit closeEditor(currentEditor, EditPreviousItem).
Нужное место определяется в зависимости от типа редактора используемого в делегате.
3. Плохой, но вариант. Создать делегат с редактором типа "Диалог-М", где М обозначает модальность изобретения.
Записан
Павел_F.
Гость
« Ответ #2 : Февраль 11, 2010, 21:27 »

Со вторым большое спасибо за идею. Правда сделал переопределив closeEditor у QTableView.
А третье остается открытым. Что-то не нравится мне идея, хотя если ничего больше не придумается то так и придется делать.
Записан
SABROG
Гость
« Ответ #3 : Февраль 11, 2010, 21:35 »

Не закрывать редактор и не позволять ничего делать пользователю пока он не введет "правильные" данные в колонку 1.

Это глупо. Иногда пользователи не знают что ввести или вообще передумывают что-либо вводить. Правильнее будет выдать MessageBox с сообщением о некорректности введенных данных и предложить две кнопки "ОК", "ОТМЕНА". При ОК возвращаем пользователя в поле редактирования данных, при "ОТМЕНА" затираем данные во второй колонке и закрываем редактирование.
Записан
Павел_F.
Гость
« Ответ #4 : Февраль 11, 2010, 22:01 »

Об этом можно говорить когда сам решаешь что хорошо а что плохо. А когда задание звучит "Нужно сделать так" и не подлежит обсуждению остается только думать как это сделать. Хотя нужная составляющая есть. Как вернуть пользователя к вводу данных? Только вот без каких-либо сообщений.
« Последнее редактирование: Февраль 11, 2010, 22:04 от Павел_F. » Записан
SABROG
Гость
« Ответ #5 : Февраль 12, 2010, 10:21 »

Как вернуть пользователя к вводу данных?

Тупо перейти на нужную ячейку средствами вьюхи и вызвать edit(). Твой заказчик садист или садомазохист. Хочу посмотреть на его лицо, когда он введет неверные данные во вторую колонку, а первая его уже никогда не отпустит пока он её не заполнит.
« Последнее редактирование: Февраль 12, 2010, 10:24 от SABROG » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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