Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Amouse от Апрель 08, 2008, 18:08



Название: Запрет на ввод символов
Отправлено: Amouse от Апрель 08, 2008, 18:08
Как для QItemDelegate запретить ввод некоторых символов, чтобы они даже не появлялись на экране?


Название: Re: Запрет на ввод символов
Отправлено: Mikhail от Апрель 08, 2008, 18:28
Как для QItemDelegate запретить ввод некоторых символов, чтобы они даже не появлялись на экране?

Наследуй QItemDelegate. В своем делегате:
QWidget * QItemDelegate::createEditor ( QWidget * parent, const QStyleOptionViewItem & option, const QModelIndex & index )
Здесь должен создаваться твой редактор в котором можно фильтровать ввод.


Название: Re: Запрет на ввод символов
Отправлено: Amouse от Апрель 09, 2008, 18:30
запрет вроде наладил, но есть еще вопрос -
надо выкидывать сообщение юзеру (messageBox?) когда он давит запретную клавишу.
Но при этом фокус с edit`a снимается, и редактирование строки завершается.
Что тут можно придумать?


Название: Re: Запрет на ввод символов
Отправлено: Mikhail от Апрель 09, 2008, 19:03
запрет вроде наладил, но есть еще вопрос -
надо выкидывать сообщение юзеру (messageBox?) когда он давит запретную клавишу.
Но при этом фокус с edit`a снимается, и редактирование строки завершается.
Что тут можно придумать?

Ну например сделать завершение редактирование по Enter.


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


Название: Re: Запрет на ввод символов
Отправлено: Amouse от Апрель 10, 2008, 10:10
У своего делегата перехватывать textChanged (если это какой-нибудь qlineedit), проверять в QValidator и изменять фон на красный, если воод неверен. У меня так в одном проекте сделано.

такое к сожалению не пойдет, нужна именно мессага. И в идеале - чтобы редактирование не прервалось и юзер мог продолжить.


Название: Re: Запрет на ввод символов
Отправлено: ритт от Апрель 10, 2008, 13:37
невозможно показать диалоговое окно чтобы при этом не изменился фокус

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

опера, например, показывает кастомный тултип с мигающим текстом, когда длина введённого текста превышает допустимую - вполне интуитивно


Название: Re: Запрет на ввод символов
Отправлено: Amouse от Апрель 14, 2008, 11:15
невозможно показать диалоговое окно чтобы при этом не изменился фокус

проблему решил и с измененим фокуса,
но интересно, как в Qt сделать окошко(?) навроде того, которое выкидывает винда при попытке переименовать файл в explorer`е, введя в имя недопустимый символ...


Название: Re: Запрет на ввод символов
Отправлено: ритт от Апрель 14, 2008, 11:47
тултип