Название: QLineEdit - ввод определенных букв. Отправлено: Alex_C от Июнь 26, 2012, 09:05 Про setValidator знаю. :)
Нужно немного другое: чтобы QLineEdit реагировал только на клавиши A-Z, при этом отображал их большими буквами именно как A-Z вне зависимости от включенной раскладки клавиатуры. Другие клавиши - просто игнорировались. Т.е. даже на русской раскладке. Название: Re: QLineEdit - ввод определенных букв. Отправлено: Bepec от Июнь 26, 2012, 09:15 Насколько я помню, валидатор регЕксп принимает. Так что проблемы "чтобы ничего кроме них не вводилось" не стоит.
Но, как понимаю, тебе надо, чтобы при нажатии "ф", "Ф", "a", "A" выводилось всегда "A", вне всяких зависимостей? Название: Re: QLineEdit - ввод определенных букв. Отправлено: lighting от Июнь 26, 2012, 09:17 Код не подходит? Или надо чтобы все само менялось? Название: Re: QLineEdit - ввод определенных букв. Отправлено: Bepec от Июнь 26, 2012, 09:25 TextEdited позволяет вводить символы. Но моментально удаляет их :D
PS ждём уточнений ТСса о его желаниях. Название: Re: QLineEdit - ввод определенных букв. Отправлено: Alex_C от Июнь 26, 2012, 09:27 Да Верес абсотно прав - мне и нужно именно это!
На дельфи было событие KeyPress, которое выдавало именно код нажатой кнопки, там все было просто. Т.е. вне зависимости от установленного языка должен выводиться латинский символ для данной кнопки в верхнем регистре. Название: Re: QLineEdit - ввод определенных букв. Отправлено: Пантер от Июнь 26, 2012, 09:33 http://doc-snapshot.qt-project.org/4.8/qtextedit.html#keyPressEvent
Название: Re: QLineEdit - ввод определенных букв. Отправлено: Bepec от Июнь 26, 2012, 09:44 Alex_C - обрадую вас.
Берём QLineEdit, наследуемся от него, переопределяем void keyPressEvent ( QKeyEvent * event ) А у event есть красивый метод "nativeVirtualKey", который в аски переводишь и получаешь английскую буковку, невзирая на раскладочку :) Название: Re: QLineEdit - ввод определенных букв. Отправлено: Пантер от Июнь 26, 2012, 09:47 Можно не наследоваться, а установить эвентФильтр.
Название: Re: QLineEdit - ввод определенных букв. Отправлено: Bepec от Июнь 26, 2012, 09:50 Хм. Пантер, а не "Пушкой по воробьям"? Хотя конечно уже обсуждали - каждый решает для себя :)
В любом случае ему нужно будет блокировать Вставку, Замену невалидными буквами. К тому же интересно, сработает ли вставка симолов с ALT+xxxx? Название: Re: QLineEdit - ввод определенных букв. Отправлено: Alex_C от Июнь 26, 2012, 11:16 Да спасибо!
По моему самое простое - eventFilter, хотя это дело вкуса. Чего то только у меня подменить событие не получается Код
В qDebug() все выводится как надо, а вот при QApplication::sendEvent(target, upperKeyEvent); программа аварийно завершается. Название: Re: QLineEdit - ввод определенных букв. Отправлено: Igors от Июнь 26, 2012, 11:27 В qDebug() все выводится как надо, а вот при QApplication::sendEvent(target, upperKeyEvent); программа аварийно завершается. Ну зачем же Вы из обработчика событий посылаете еще событие? Просто в пришедшем event измените char на нужный и вызовите оригинальный eventFilterНазвание: Re: QLineEdit - ввод определенных букв. Отправлено: Alex Custov от Июнь 26, 2012, 11:32 У меня сделано через валидатор, без учёта раскладки
Код
В регэкспе уже пишешь какой ввод разрешить, какой нет. Название: Re: QLineEdit - ввод определенных букв. Отправлено: Alex_C от Июнь 26, 2012, 11:40 в пришедшем event измените char на нужный и вызовите оригинальный eventFilter Да я вроде как сам это понимаю :) Но смотрю в документацию по QKeyEvent и не наблюдаю возможности заменить в нем что либо.... Название: Re: QLineEdit - ввод определенных букв. Отправлено: GreatSnake от Июнь 26, 2012, 11:58 Да я вроде как сам это понимаю :) Менять не получится, только создать новый QKeyEvent.Но смотрю в документацию по QKeyEvent и не наблюдаю возможности заменить в нем что либо.... Название: Re: QLineEdit - ввод определенных букв. Отправлено: Bepec от Июнь 26, 2012, 11:59 Создай свой QKeyEvent и отправь его тудыть :) Дальше в смысле по цепочке.
Пример прям из Шлее :D Советую почитывать изредка. Название: Re: QLineEdit - ввод определенных букв. Отправлено: Alex_C от Июнь 26, 2012, 11:59 Менять не получится, только создать новый QKeyEvent. Ну так я и создаю - собственно так в инете и примеры нашел. Код
получаю вылет программы. Название: Re: QLineEdit - ввод определенных букв. Отправлено: Alex_C от Июнь 26, 2012, 12:01 Создай свой QKeyEvent и отправь его тудыть :) Дальше в смысле по цепочке. Ну так я что делаю? :) Название: Re: QLineEdit - ввод определенных букв. Отправлено: GreatSnake от Июнь 26, 2012, 12:02 Ну так я что делаю? :) Ты создаёшь новое событие, а нужно изменить существующее:Код
Название: Re: QLineEdit - ввод определенных букв. Отправлено: Alex_C от Июнь 26, 2012, 12:13 Так тоже уже пробовал - буквы вводятся такие, какие они есть, а не вврерхнем регистре.
Полный код: Код
Название: Re: QLineEdit - ввод определенных букв. Отправлено: Igors от Июнь 26, 2012, 12:15 Код
Код
Так тоже уже пробовал - буквы вводятся такие, какие они есть, а не вврерхнем регистре. Заменить NoModifier на ShiftModifierНазвание: Re: QLineEdit - ввод определенных букв. Отправлено: GreatSnake от Июнь 26, 2012, 12:26 Может лучше так И потерять всё что относится непосредственно к QKeyEvent ???Код
Название: Re: QLineEdit - ввод определенных букв. Отправлено: Igors от Июнь 26, 2012, 12:41 И потерять всё что относится непосредственно к QKeyEvent ??? Верно, надо присваивать приведенный keyEventКод Подмена указателя вроде ничем не грозит, но нет уверенности что изначальный event не пройдет где-то еще Название: Re: QLineEdit - ввод определенных букв. Отправлено: Bepec от Июнь 26, 2012, 13:21 Alex_C - так увеличивайте буковки :)
QChar::toUpper (); И всё в принципе. В чём проблема то? :) Название: Re: QLineEdit - ввод определенных букв. Отправлено: Alex_C от Июнь 26, 2012, 14:00 Alex_C - так увеличивайте буковки :) Проблема в том, что вопрос то ОЧЕНЬ простой :) И решение его должно быть как все в Qt очень простое и понятное. А его нет. :) Что странно! Просто вуковки увеличивать нельзя - Я вместо Z получается. Кстати, зря меня к документации тут отправляли - сейчас еще все что нашел пересмотрел - нет аналогичного примера у Шлее - есть типа if (keyEvent->key() == Qt::Key_Tab) { insertAtCurrentPosition('\t'); а это совсем другое, здесь нет подмены события. Кстати и в инете все примеры аналогичные. Пока вопрос открытый - буду искать еще! Всем спасибо! Будут еще какие предложения пишите! Как проблему решу - отпишусь! Название: Re: QLineEdit - ввод определенных букв. Отправлено: Alex_C от Июнь 26, 2012, 14:06 Приз получает Igors :)
Вернвй код: Код
Правда почему так - *keyEvent = ke; - пока не понял, и чем это отличается от QWidget::eventFilter(target, &ke); ? Название: Re: QLineEdit - ввод определенных букв. Отправлено: Bepec от Июнь 26, 2012, 14:08 Я б вообще не парился, а переопределил lineEdit :D
Ты кстати учти - если в твой lineEdit вставить - тогда все евент фильтры пойдут прахом :D Название: Re: QLineEdit - ввод определенных букв. Отправлено: mutineer от Июнь 26, 2012, 14:41 Правда почему так - *keyEvent = ke; - пока не понял, и чем это отличается от QWidget::eventFilter(target, &ke); ? Рискну предположить. Вызывающий eventFilter код делает с этим ивентом что-то еще после фильтрации. QWidget::eventFilter(target, &ke) не модифицирует исходный ивент и вызывающий код обрабатывает исходное событие. *keyEvent = ke подменяет исходное событие на копию ke, то бишь изменяет обрабатываемое событие, а не только фильтруемое Название: Re: QLineEdit - ввод определенных букв. Отправлено: Alex_C от Июнь 29, 2012, 13:23 Я б вообще не парился, а переопределил lineEdit :D Для информации - действительно, в итоге оказалось куда как проще переопределить свой lineEdit, чем вешать eventFilter ! :) |