Перейти к содержимому
Compvision.ru
morwin

cvWaitKey при включенном Num Lock

Recommended Posts

Доброго время суток.

Помогите разобраться.

Как определить нажата ли кнопка q при включенном Num Lock.

if (cvWaitKey(0) == 'q')

cout << "you press: q";

при включенном Num Lock не работает

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

у меня работает. Может окно не в фокусе?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Тестировал на ноутбуке с Ubuntu и на нетбуке c Arch Linux. Не работает ((

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

http://www.comptechdoc.org/os/linux/howlinuxworks/linux_hlkeycodes.html

когда с NumLock-ом, то 'Q' - надо проверять.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

http://www.comptechdoc.org/os/linux/howlinuxworks/linux_hlkeycodes.html

когда с NumLock-ом, то 'Q' - надо проверять.

Не подходит.

При выключеном Num Lock при нажатии на "q" key=113

При включенном key=1048689

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ну сделайте так с=waitKey()&0xFF

и будет Вам счастье :)

1048689 = 100000000000001110001

113 = 1110001

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну очень интересно что ж это за баг такой.

Вот в коде https://code.ros.org/svn/opencv/trunk/opencv/modules/highgui/src/window_gtk.cpp есть интересная штука.

static gboolean icvOnKeyPress( GtkWidget * /*widget*/,

                GdkEventKey* event, gpointer /*user_data*/ )

{

    int code = 0;


    switch( event->keyval )

    {

    case GDK_Escape:

        code = 27;

        break;

    case GDK_Return:

    case GDK_Linefeed:

        code = '\n';

        break;

    case GDK_Tab:

        code = '\t';

    break;

    default:

        code = event->keyval;

    }


    code |= event->state << 16;


#ifdef HAVE_GTHREAD

    if(thread_started) g_mutex_lock(last_key_mutex);

#endif


    last_key = code;

"code |= event->state << 16;"

По ходу это и есть тот сдвиг за 16 бит

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну так не баг это. Просто берут код клавиши, и накладывают на него по ИЛИ (в старшие 16 бит) код состояния системы ввода (разные шифты, сонтролы и альты, плюс к этому часто еще состояние мышиных кнопок туда добавляют).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×