LINUX.ORG.RU

как получить раскладку клавиатуры

 , ,


0

1

Подскажите, пожалуйста, как получить текущую раскладку клавиатуры?

То есть RU или En =)

Qt 5.3 (и только он).

Пыталась так:

QLocale loc = QApplication::keyboardInputLocale();
Ошибка:
ошибка: 'keyboardInputLocale' is not a member of 'QApplication'

Если вот так:

QString lang = QApplication::inputMethod()->locale().name();
То всегда получаю ru_RU.

ЧЯДНТ?)

Ответ на: комментарий от Y

Я вроде именно так и делаю.

QInputMethod * QGuiApplication::inputMethod() [static]

returns the input method.

The input method returns properties about the state and position of the virtual keyboard. It also provides information about the position of the current focused input element.
traktor
() автор топика

средствами qt наверно никак, средствами X можно так:

void MainWindow::on_pushButton_clicked()
{
    XkbStateRec xkbState;
    Display *display = XOpenDisplay(NULL);
    XkbGetState(display, XkbUseCoreKbd, &xkbState);
    qDebug() << xkbState.group;

    Atom real_prop_type; int fmt;
    unsigned long nitems, extra_bytes;
    char *prop_data = NULL;
    Atom rules_atom = XInternAtom(display, "_XKB_RULES_NAMES", False);
    XGetWindowProperty(display, DefaultRootWindow(display), rules_atom, 0L, 1024,
        False, XA_STRING, &real_prop_type, &fmt, &nitems, &extra_bytes, (unsigned char **) (void *) &prop_data);

    QStringList names;
    for(char* p=prop_data; p-prop_data < (long)nitems && p != NULL; p += strlen(p)+1) names.append( p );
    if (names.count() > 3 ) names = names[2].split(",");
    qDebug() << names[xkbState.group];

    XFree(prop_data);
    XCloseDisplay(display);
}

x905 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.