Russian Qt Forum

Qt => Qt Embedded => Тема начата: lisarden от Апрель 04, 2011, 10:02



Название: как подсунуть русскую букву в QLineEdit?
Отправлено: lisarden от Апрель 04, 2011, 10:02
есть ARM9 девайс с файловой системой busybox. Поддержки русского ввода нет, но Qt само по себе русский текст нормально отображает.

Задача: при нажатии кнопок в латинской (она же единственная) раскладке в QLineEdit отображать русские буквы.
Как это сделать? На ум приходят варианты:
1) в eventFilter на QLineEdit перехватывать нажатия кнопок и руками делать setText/insert
2) перехватывать нажатия кнопок там же, подменять keymaps(?)

в общем, что проще и более подходит под данную задачу?


Название: Re: как подсунуть русскую букву в QLineEdit?
Отправлено: Fat-Zer от Апрель 04, 2011, 10:15
1) Busybox - это не файловая система
2) похоже вариант с перехватом событий топорный, но единственный...


Название: Re: как подсунуть русскую букву в QLineEdit?
Отправлено: Fess от Апрель 04, 2011, 10:20
Mожет быть лучше перехватывать события QKeyEvent в фильтре на уровне QApplication?
Будет универсальнее..
Скажем, игнорировать пришедшее, декодировать и отправлять новое событие с правильным содержанием.
QKeyEvent::QKeyEvent ( Type type, int key, Qt::KeyboardModifiers modifiers, const QString & text = QString(), bool autorep = false, ushort count = 1 )

..and the given text is the Unicode text that the key generated.


Название: Re: как подсунуть русскую букву в QLineEdit?
Отправлено: lisarden от Апрель 04, 2011, 11:49
Спасибо за совет!

Попробовал сделать так:
Код:
qApp->sendEvent(qApp->focusWidget()
        , new QKeyEvent(QEvent::KeyPress, Qt::Key_1
        , Qt::NoModifier, "-"
        , false, 1));
.. работает, но не понятно назначение Qt::Key_1, т.к. напиши здесь хоть что, всё равно будет текст в кавычках подсовывать.


Название: Re: как подсунуть русскую букву в QLineEdit?
Отправлено: Fess от Апрель 04, 2011, 12:03
Цитировать
Int key is the code for the Qt::Key that the event loop should listen for. If key is 0, the event is not a result of a known key; for example, it may be the result of a compose sequence or keyboard macro.
Видимо, это влияет на фильтрацию события в цикле их обработки..
В вашем случае лучше посылать то, что и пришло: int QKeyEvent::key () const


Название: Re: как подсунуть русскую букву в QLineEdit?
Отправлено: lisarden от Апрель 05, 2011, 11:07
выяснил, что передача той же кнопки приводит к segmentation fault. Пока передаю key=0 и так работает.


Название: Re: как подсунуть русскую букву в QLineEdit?
Отправлено: ритт от Апрель 05, 2011, 18:16
а мб не изобретать велосипеды, а почитаь документацию по qws? :)


Название: Re: как подсунуть русскую букву в QLineEdit?
Отправлено: lisarden от Апрель 05, 2011, 22:03
а мб не изобретать велосипеды, а почитаь документацию по qws? :)
я читаю, но выборочно :).надо мной заказчик стоит и особо вчитываться времени нет..
Может, ткнете носом в доку? ;)


Название: Re: как подсунуть русскую букву в QLineEdit?
Отправлено: Пантер от Апрель 05, 2011, 22:36
тыкаю (http://doc.qt.nokia.com/) :)


Название: Re: как подсунуть русскую букву в QLineEdit?
Отправлено: lisarden от Апрель 05, 2011, 22:41
тыкаю (http://doc.qt.nokia.com/) :)
ну, этот ресурс у меня не закрывается с утра до ночи..


Название: Re: как подсунуть русскую букву в QLineEdit?
Отправлено: ритт от Апрель 05, 2011, 23:11
тыкаю (http://doc.qt.nokia.com/) :)
ну, этот ресурс у меня не закрывается с утра до ночи..
ещё бы его кто-нибудь читал...

http://doc.qt.nokia.com/4.7/qt-embedded-charinput.html#keymaps


Название: Re: как подсунуть русскую букву в QLineEdit?
Отправлено: ритт от Апрель 06, 2011, 00:13
бтв, всегда скептически относился к отмазкам вида "проект горит/заказчик плетьми лупит - читать доки некогда"...
неужели велосипедостроить и/или ждать ответа на форуме по нескольку дней - быстрее, чем даже скрупулёзно изучить доки? к примеру, у меня поиск материала по ссылке выше занял около минуты...


Название: Re: как подсунуть русскую букву в QLineEdit?
Отправлено: lisarden от Апрель 06, 2011, 06:50

http://doc.qt.nokia.com/4.7/qt-embedded-charinput.html#keymaps
[/quote]
читал и даже начал немного в эту сторону копать, но был сбит с толку :)

тогда, уважаемый Гуру, эти keymaps помогут реализовать клавиатуру телефона, у которого только цифровая клава есть и надо жать по 5 раз на "4", чтобы плучить "#" или "щ"? Мне кажется эти keymaps нужны, чтобы тупо транслировать O->Щ и L->Д. Я не прав?


Название: Re: как подсунуть русскую букву в QLineEdit?
Отправлено: ритт от Апрель 06, 2011, 14:52
не нужно ёрничать...

про "надо жать по 5 раз на "4", чтобы плучить "#" или "щ"" в данном треде встречается впервые и, видимо, до сих пор была угадайка.
если стандартный linux input кбд драйвер поддерживает такой тип набора (и если я правильно помню), то всё в порядке, т.к. кеймапы обрабатываются в последнюю очередь (непосредственно перед отправкой события qws-серверу). а вот поддерживается ли многоуровневый маппинг? - этого я уже не помню вовсе...