Russian Qt Forum

Qt => Интернационализация, локализация => Тема начата: Zmeishe от Апрель 29, 2008, 16:27



Название: Динамическое переключение клавиатуры
Отправлено: Zmeishe от Апрель 29, 2008, 16:27
В разных виджетах необходим разный язык ввода русский/английский

Нашёл навскидку
   qDebug() << QApplication::keyboardInputLocale().languageToString(QApplication::keyboardInputLocale().language());
Пишет "English"

Вызываю для виджета
   setLocale(QLocale(QLocale::Russian, QLocale::RussianFederation));
QApplication::keyboardInputLocale() всё-равно остаётся "English".

Есть какой-нибудь способ ?

PS
Нужно и для Linux и для Windows.


Название: Re: Динамическое переключение клавиатуры
Отправлено: Пантер от Апрель 29, 2008, 17:03
Для винды использую винапи.
Код:
#ifdef Q_WS_WIN
        #include "qt_windows.h"
#endif
//
int main(int argc, char ** argv)
{
#ifdef Q_WS_WIN
        LoadKeyboardLayoutA("00000419", KLF_ACTIVATE);
#endif
}

 Для Линухи можно тоже поискать.


Название: Re: Динамическое переключение клавиатуры
Отправлено: Zmeishe от Апрель 30, 2008, 08:33
А в чём разница между Q_WS_WIN и Q_OS_WIN ?
Просто я всегда пользуюсь Q_OS_WIN

Линкер спрашивает какую либу прилинковать надо для LoadKeyboardLayoutA ?
Я попробовал User32.lib из состава MS-VS вроде получилось. И даже работает.


Название: Re: Динамическое переключение клавиатуры
Отправлено: Zmeishe от Май 05, 2008, 15:26
А можно ли таким способом ?
Код:
#ifdef Q_OS_LINUX
   // Проверить язык ввода клавиатуры на соответствие языка системной локали
   if( QApplication::keyboardInputLocale().language() != QLocale::system().language() )
   // если не соответствует, послать сообщение о переключении   
   QApplication::sendEvent(this, &QKeyEvent(QEvent::KeyPress, key, Qt::GroupSwitchModifier));     
#endif
Qt::GroupSwitchModifier - X11 only. A Mode_switch key on the keyboard is pressed.
Я только не понял если Qt::GroupSwitchModifier это то, что мне надо, то что должно быть вместо key в QKeyEvent().

пробовал key = 0 и key = Qt::Key_Meta
Ни то ни другое не работает. А на большее фантазии не хватило.
Вообще, так можно переключить ?