Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Общие вопросы _ Текущая раскладка клавиатуры

Автор: Мотов Юрий 1.11.2010, 10:06

Не нашел решения как узнать текущую раскладку клавиатуры и как её изменить.
Qt 4.7.0, Windows

Автор: kwisp 1.11.2010, 10:29

посмотри
http://doc.crossplatform.ru/qt/en/4.6.x/qapplication.html#keyboardInputLocale

П.С.
гугл быстро ответ нашел
и что тема делает в разделе
Qt Ввод/Вывод, Сеть. Межпроцессное взаимодействие ?

Автор: Мотов Юрий 1.11.2010, 11:02

Цитата(kwisp @ 1.11.2010, 11:29) *
посмотри
http://doc.crossplatform.ru/qt/en/4.6.x/qapplication.html#keyboardInputLocale

П.С.
гугл быстро ответ нашел
и что тема делает в разделе
Qt Ввод/Вывод, Сеть. Межпроцессное взаимодействие ?


keyboardInputLocale() пробовал, у меня всегда возвращает RU_ru независимо от выбранной раскладки.

Автор: kwisp 1.11.2010, 17:07

вообще говоря это баг был до версии 4.7 но у тебя как раз она.
может не исправили?
зайди на багтрекер троллей посмотри.

Автор: CodeHunter 1.11.2010, 17:40

void MainWindow::changeEvent(QEvent *e)
{
QMainWindow::changeEvent(e);
switch (e->type()) {
case QEvent::LanguageChange:
ui->retranslateUi(this);
break;
default:
break;
}
}

Автор: Litkevich Yuriy 1.11.2010, 18:13

CodeHunter, объясни, что делает этот код

Автор: CodeHunter 1.11.2010, 21:19

Цитата
keyboardInputLocale() пробовал, у меня всегда возвращает RU_ru независимо от выбранной раскладки.


Это по тому что сообщение о смене раскладки клавиатуры не доходит до формы (то есть не обрабатывается). Без этой обработки приложение не знает о смене раскладки клавиатуры, а возвращает ту раскладку которая была при запуску программы. Здесь же мы обрабатываем пришедшее сообщение от системы и обновляем все данные в приложении

Автор: Litkevich Yuriy 2.11.2010, 11:19

CodeHunter, ты не ответил на мой вопрос

Автор: CodeHunter 2.11.2010, 11:37

Цитата(Litkevich Yuriy @ 2.11.2010, 10:19) *
CodeHunter, ты не ответил на мой вопрос



Цитата(CodeHunter @ 1.11.2010, 20:19) *
Здесь же мы обрабатываем пришедшее сообщение от системы и обновляем все данные в приложении

Автор: igor_bogomolov 2.11.2010, 12:37

Цитата(CodeHunter @ 1.11.2010, 21:19) *
Здесь же мы обрабатываем пришедшее сообщение от системы и обновляем все данные в приложении
нам не нужно обновлять никаких данных. Нам нужно узнать текущую раскладку клавиатуры. Где в твоем коде это делается?

Автор: CodeHunter 2.11.2010, 14:25

Цитата(igor_bogomolov @ 2.11.2010, 11:37) *
ним ни нужно обновлять ни каких данных. Нам нужно узнать текущую раскладку клавиатуры. Где в твоем коде это делается?


Сначала посмотри на мой ответ, а потом задавай такие вопросы . :ireful: Я ответил человеку на вопрос :

Цитата
keyboardInputLocale() пробовал, у меня всегда возвращает RU_ru независимо от выбранной раскладки.
.


Цитата(CodeHunter @ 1.11.2010, 20:19) *
keyboardInputLocale() пробовал, у меня всегда возвращает RU_ru независимо от выбранной раскладки.


Это по тому что сообщение о смене раскладки клавиатуры не доходит до формы (то есть не обрабатывается). Без этой обработки приложение не знает о смене раскладки клавиатуры, а возвращает ту раскладку которая была при запуску программы. Здесь же мы обрабатываем пришедшее сообщение от системы и обновляем все данные в приложении

Автор: Litkevich Yuriy 2.11.2010, 14:29

CodeHunter, ты не приводил код отлавливающий смену раскладки. ты привёл код который принудительно переводит интерфейс.
За каким лешим ты его привёл?

Цитата(CodeHunter @ 2.11.2010, 18:25) *
Здесь же мы обрабатываем пришедшее сообщение от системы и обновляем все данные в приложении
в твоём коде не обновляются все данные приложения.

Цитата(CodeHunter @ 2.11.2010, 18:25) *
Это по тому что сообщение о смене раскладки клавиатуры не доходит до формы
покажи место в документции, где упоминает, что в Qt есть сообщение о смене раскладки

ты чё несёшь вообще?

Автор: kwisp 2.11.2010, 14:46

Цитата(CodeHunter @ 1.11.2010, 17:40) *
void MainWindow::changeEvent(QEvent *e)
{
QMainWindow::changeEvent(e);
switch (e->type()) {
case QEvent::LanguageChange:
ui->retranslateUi(this);
break;
default:
break;
}
}

не пойму если сообщение о смене языка уже пришло зачем ui->retranslateUi(this);
CodeHunter,
можешь полностью рабочий компилируемый пример выложить ?

Автор: Мотов Юрий 2.11.2010, 14:49

По keyboardInputLocale() действительно баг
http://bugreports.qt.nokia.com/browse/QTBUG-14512?page=com.atlassian.jira.plugin.system.issuetabpanels%3Aall-tabpanel

А может подскажете алтернативный метод? Видел где-то совет воспользоваться WinAPI, сейчас буду пытаться.
И ещё видел что-то с xkb, не смог понять что это такое и счем едят..

Автор: kwisp 2.11.2010, 14:54

Цитата(Мотов Юрий @ 2.11.2010, 14:49) *
По keyboardInputLocale() действительно баг

ч.т.д.

ждём все вместе от CodeHunter`а рабочий пример.

Автор: Litkevich Yuriy 2.11.2010, 15:10

Цитата(Мотов Юрий @ 2.11.2010, 17:49) *
А может подскажете алтернативный метод?
попробуй контролировать событие QEvent::KeyboardLayoutChange

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)