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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] Событие смены языков ввода клавиатуры  (Прочитано 6049 раз)
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« : Октябрь 26, 2012, 01:22 »

Здравствуйте! Улыбающийся

Как можно отследить, когда меняется раскладка клавиатуры, например с русского на английский, учитывая, что комбинация клавиш для этого может быть любой (мне удобнее lShift + lAlt, у кого то может быть своя)?

Я это делал через changeEvent() и проверку:
Код:
const int hexKeyLanguageRussian = 0x419;
const int hexKeyLanguageEnglish = 0x409;

QString getTheCurrentLanguageKeyboardLayouts()
{
    QString name;
#ifdef Q_WS_WIN    
    switch(LOWORD(GetKeyboardLayout(0)))
    {
    case hexKeyLanguageRussian:
        name = "Russian";
        break;
    case hexKeyLanguageEnglish:
        name = "English";
        break;
    }
#endif
    return name;
}

void changeEvent()
{
  QString language = getTheCurrentLanguageKeyboardLayouts();
  ....
}

Но моя реализация не самая умная идея Улыбающийся
« Последнее редактирование: Ноябрь 11, 2012, 20:25 от gil9red » Записан

gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Октябрь 26, 2012, 04:52 »

Нашел Улыбающийся

нужно изменить changeEvent:
Код:
void changeEvent(QEvent *event)
{
    if(event->type() == QEvent::KeyboardLayoutChange)
    {
        qDebug() << getTheCurrentLanguageKeyboardLayouts();
    }else
        QWidget::changeEvent(event);
}

Соответственно QEvent::KeyboardLayoutChange будет вызываться при смене раскладки Улыбающийся
Записан

Magseven
Новичок

Offline Offline

Сообщений: 25


Просмотр профиля
« Ответ #2 : Январь 29, 2018, 10:38 »

Видел этот пример в сети. К сожалению, сhangeEvent с типом QEvent::KeyboardLayoutChange не вызывается для главного окна приложения ( QMainWindow).
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #3 : Январь 29, 2018, 11:59 »

Мб, это событие не у самого QMainWindow вызывается, а у его centralWidget() ?
Записан

Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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