Версия для печати темы
Форум на 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)

ним ни нужно обновлять ни каких данных. Нам нужно узнать текущую раскладку клавиатуры. Где в твоем коде это делается?
Сначала посмотри на мой ответ, а потом задавай такие вопросы .

Я ответил человеку на вопрос :
Цитата
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)