Russian Qt Forum
Ноябрь 23, 2024, 05:32 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Динамическое переключение клавиатуры  (Прочитано 6428 раз)
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.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Апрель 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
}

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

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Zmeishe
Гость
« Ответ #2 : Апрель 30, 2008, 08:33 »

А в чём разница между Q_WS_WIN и Q_OS_WIN ?
Просто я всегда пользуюсь Q_OS_WIN

Линкер спрашивает какую либу прилинковать надо для LoadKeyboardLayoutA ?
Я попробовал User32.lib из состава MS-VS вроде получилось. И даже работает.
« Последнее редактирование: Апрель 30, 2008, 08:39 от Zmeishe » Записан
Zmeishe
Гость
« Ответ #3 : Май 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
Ни то ни другое не работает. А на большее фантазии не хватило.
Вообще, так можно переключить ?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.126 секунд. Запросов: 23.