Russian Qt Forum

Qt => Общие вопросы => Тема начата: gil9red от Октябрь 26, 2012, 01:22



Название: [РЕШЕНО] Событие смены языков ввода клавиатуры
Отправлено: gil9red от Октябрь 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();
  ....
}

Но моя реализация не самая умная идея :)


Название: Re: Событие смены языков ввода клавиатуры
Отправлено: gil9red от Октябрь 26, 2012, 04:52
Нашел :)

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

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


Название: Re: [РЕШЕНО] Событие смены языков ввода клавиатуры
Отправлено: Magseven от Январь 29, 2018, 10:38
Видел этот пример в сети. К сожалению, сhangeEvent с типом QEvent::KeyboardLayoutChange не вызывается для главного окна приложения ( QMainWindow).


Название: Re: [РЕШЕНО] Событие смены языков ввода клавиатуры
Отправлено: gil9red от Январь 29, 2018, 11:59
Мб, это событие не у самого QMainWindow вызывается, а у его centralWidget() ?