Здравсвтуйте.
Нужно получить таблицу похожую на
50 => array(2, ", @)
55 => array(7, &, ?)по всем алфивитно-цифровым клавишам.
Желательно средствами QT4, либо любым другим способом, хоть и на Ассемблере :)
Kubuntu 13.10
3.8.0-31-generic amd64
Здравсвтуйте.
Нужно получить таблицу похожую на
50 => array(2, ", @)
55 => array(7, &, ?)по всем алфивитно-цифровым клавишам.
Желательно средствами QT4, либо любым другим способом, хоть и на Ассемблере :)
Kubuntu 13.10
3.8.0-31-generic amd64
средствами Qt скорей всего не получится...
ИМХО копать в сторону иксов/xkb. по крайней мере для текущей раскладки это должно быть относительно не сложно...
а зачем оно вообще нужно?
Я не понимаю, что это за строки, но для всех клавиш в Qt есть enum Key и в нём, например,
Qt::Key_2 - 50, Qt::Key_7 - 55. Если надо получить таблицу, то это же разовое действие.
Пётр.
а зачем оно вообще нужно?
Изобразить клавиатуру в виде карты изображений, типа такого:
<map>
<area ccc>
<area xxx>
</map>Без QWebView, потому что у меня уже аллергия на HTML и на всё что с ним связано. Не для того закинул WEB-программирование, чтоб в QT верстать на HTML :)
И будучи программистом верстальщиков нанимал всегда. Моё - PHP, а от упоминания HTML - пятна на шее высыпают по самые ступни, и до самого пояса, причём снизу ;)
Я не понимаю, что это за строки, но для всех клавиш в Qt есть enum Key и в нём, например,
Qt::Key_2 - 50, Qt::Key_7 - 55.
То строки на PHP написал, по привычке.
А зачем мне перечисления, где соответствие скан-кода клавише.
Где найти Qt::Key_2 что оно соответствует собаке и двойной кавычке?
У меня директория /etc/X11/xkb/ пустая :(
Написано что там файл подобного содержания может быть:
key <AE02> { [ 2, quotedbl, twosuperior, oneeighth ] };
key <AE03> { [ 3, section, threesuperior, sterling ] };
key <AE04> { [ 4, dollar, onequarter, currency ] };
key <AE11> { [ ssharp, question, backslash, questiondown ] };
key <AE12> { [dead_acute, dead_grave, dead_cedilla, dead_ogonek ] };
key <AD03> { [ e, E, EuroSign, EuroSign ] };
key <AD06> { [ z, Z, leftarrow, yen ] };
key <AD11> { [udiaeresis, Udiaeresis, dead_diaeresis, dead_abovering ] };
key <AD12> { [ plus, asterisk, dead_tilde, dead_macron ] };Вот только нету :(
А зачем мне перечисления, где соответствие скан-кода клавише.
Где найти Qt::Key_2 что оно соответствует собаке и двойной кавычке?
Совершенно не понимаю этой фразы. Key_2 - это код цифры '2' в таблице символов.
Key_QuoteDbl, Key_At.
Пётр.
dex.electronics, ни черта не понятно, что ты хочешь получить...
Просто таблицу, чтобы сделать виртуальную клавиатуру?
или нужно отдельно получать её при каждом запуске, чтобы у всяких любителей дворака и прочих оригинальных личностей она была как и раскладка?
для чего это всё будет использоваться? от этого зависит подойдут ли нативный иксовые коды или нужен будет маппинг именно для Qt'шных. т.к. кьют использует свои велосипеды и прямого соответствия с нативными у них нет (с.м. в недрах Qt в районе src/gui/kernel/qkeymapper_x11.cpp)
в случае с иксами всё, как я говорил, относительно просто...
вот так можно получить таблицу для текущей раскладки:
/* Copyright (C) 2013 Alexander Golubev (Fat-Zer) <fatzer2@gmail.com> */
// build with: gcc -lX11 ./keymapping.c
#include <stdio.h>
#include <assert.h>
#include <X11/Xlib.h>
int main() {
Display *dpy=XOpenDisplay(0);
int min_keycode, max_keycode, num_keycodes;
KeySym *ks = 0, *ks_i=0;
int keysyms_per_keycode;
int i;
assert(dpy);
XDisplayKeycodes(dpy, &min_keycode, &max_keycode);
printf("max_keycode: %d\nmin_keycode: %d\n", min_keycode, max_keycode);
num_keycodes = max_keycode - min_keycode + 1;
ks = XGetKeyboardMapping(dpy, min_keycode,
num_keycodes, &keysyms_per_keycode);
assert(ks);
printf("keysyms_per_keycode: %d\n", keysyms_per_keycode );
for(ks_i = ks, i=0; i< num_keycodes; ks_i += keysyms_per_keycode, i++) {
int j;
printf("%#04x:", min_keycode+i);
for (j = 0; j < keysyms_per_keycode; ++j) {
if(!ks_i[j]) {
break;
}
printf("\t%#06x %s", ks_i[j], XKeysymToString(ks_i[j]));
}
printf("\n");
}
XFree(ks);
return 0;
}
Доки по XLib'у: http://tronche.com/gui/x/xlib/input/keyboard-encoding.html