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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Запрет на ввод символов  (Прочитано 5795 раз)
Amouse
Гость
« : Апрель 08, 2008, 18:08 »

Как для QItemDelegate запретить ввод некоторых символов, чтобы они даже не появлялись на экране?
Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #1 : Апрель 08, 2008, 18:28 »

Как для QItemDelegate запретить ввод некоторых символов, чтобы они даже не появлялись на экране?

Наследуй QItemDelegate. В своем делегате:
QWidget * QItemDelegate::createEditor ( QWidget * parent, const QStyleOptionViewItem & option, const QModelIndex & index )
Здесь должен создаваться твой редактор в котором можно фильтровать ввод.
Записан
Amouse
Гость
« Ответ #2 : Апрель 09, 2008, 18:30 »

запрет вроде наладил, но есть еще вопрос -
надо выкидывать сообщение юзеру (messageBox?) когда он давит запретную клавишу.
Но при этом фокус с edit`a снимается, и редактирование строки завершается.
Что тут можно придумать?
Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #3 : Апрель 09, 2008, 19:03 »

запрет вроде наладил, но есть еще вопрос -
надо выкидывать сообщение юзеру (messageBox?) когда он давит запретную клавишу.
Но при этом фокус с edit`a снимается, и редактирование строки завершается.
Что тут можно придумать?

Ну например сделать завершение редактирование по Enter.
Записан
Icoz
Гость
« Ответ #4 : Апрель 09, 2008, 22:35 »

запрет вроде наладил, но есть еще вопрос -
надо выкидывать сообщение юзеру (messageBox?) когда он давит запретную клавишу.
Но при этом фокус с edit`a снимается, и редактирование строки завершается.
Что тут можно придумать?
У своего делегата перехватывать textChanged (если это какой-нибудь qlineedit), проверять в QValidator и изменять фон на красный, если воод неверен. У меня так в одном проекте сделано.
Записан
Amouse
Гость
« Ответ #5 : Апрель 10, 2008, 10:10 »

У своего делегата перехватывать textChanged (если это какой-нибудь qlineedit), проверять в QValidator и изменять фон на красный, если воод неверен. У меня так в одном проекте сделано.

такое к сожалению не пойдет, нужна именно мессага. И в идеале - чтобы редактирование не прервалось и юзер мог продолжить.
Записан
ритт
Гость
« Ответ #6 : Апрель 10, 2008, 13:37 »

невозможно показать диалоговое окно чтобы при этом не изменился фокус

навскидку пара решений:
* показывать сообщение в статусной строке / в зарезервированном под сообщения лабеле
* принудительно показывать тултип над редактором с сообщением о неправильном вводе

опера, например, показывает кастомный тултип с мигающим текстом, когда длина введённого текста превышает допустимую - вполне интуитивно
Записан
Amouse
Гость
« Ответ #7 : Апрель 14, 2008, 11:15 »

невозможно показать диалоговое окно чтобы при этом не изменился фокус

проблему решил и с измененим фокуса,
но интересно, как в Qt сделать окошко(?) навроде того, которое выкидывает винда при попытке переименовать файл в explorer`е, введя в имя недопустимый символ...
Записан
ритт
Гость
« Ответ #8 : Апрель 14, 2008, 11:47 »

тултип
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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