Russian Qt Forum

Qt => Общие вопросы => Тема начата: G-virus от Февраль 01, 2010, 00:55



Название: keyPressEvent(), event->key() и QString
Отправлено: G-virus от Февраль 01, 2010, 00:55
Как можно присвоить нажатую клавишу к строке. Допустим, чтобы при нажатии клавиши, производился ее вывод?


Название: Re: keyPressEvent(), event->key() и QString
Отправлено: SABROG от Февраль 01, 2010, 01:13
Уточни. Вывод куда? Какое значение ты хочеш получить?
- в виде текста, нажал на Ф - получил "Ф"
- в виде сканкода с клавиатуры (HEX в строке)
- в виде названия перечисления (Qt::Key_A)


Название: Re: keyPressEvent(), event->key() и QString
Отправлено: G-virus от Февраль 01, 2010, 01:25
Уточни. Вывод куда? Какое значение ты хочеш получить?
- в виде текста, нажал на Ф - получил "Ф"
- в виде сканкода с клавиатуры (HEX в строке)
- в виде названия перечисления (Qt::Key_A)

в виде текста. нажал на "Ф" - получил "Ф" :). Вывод QMessageBox и запись в текстовый файл


Название: Re: keyPressEvent(), event->key() и QString
Отправлено: SABROG от Февраль 01, 2010, 01:53
QString QKeyEvent::text () const

Остальное в документации.


Название: Re: keyPressEvent(), event->key() и QString
Отправлено: G-virus от Февраль 01, 2010, 01:56
QString QKeyEvent::text () const

Хм..... Че-То я вообще не понял этой строки  ??? Можно пояснение плизз, что она вообще сделала?


Название: Re: keyPressEvent(), event->key() и QString
Отправлено: Aleksey_Zh от Февраль 01, 2010, 11:36
Т.е. отлавливаешь событие, возникающее по QKeyEvent. А потом его конвертишь в текст


Название: Re: keyPressEvent(), event->key() и QString
Отправлено: G-virus от Февраль 01, 2010, 14:35
Т.е. отлавливаешь событие, возникающее по QKeyEvent. А потом его конвертишь в текст

Вы знаете, видимо я в танке  ;D
Не пойму как это описать
Код
C++ (Qt)
void MainWindow::keyPressEvent(QKeyEvent *event)
{
   QString event->text() const;
   QMessageBox::information(NULL, event->text(), "", 0, 0);
}
 

Не так ли случайно? Просто вот так не работает) А иначе не понимаю как..странно


Название: Re: keyPressEvent(), event->key() и QString
Отправлено: crackedmind от Февраль 01, 2010, 14:39
G-virus
иди книжки читай...


Название: Re: keyPressEvent(), event->key() и QString
Отправлено: G-virus от Февраль 01, 2010, 14:40
G-virus
иди книжки читай...

Какие книжки?? Я по-моему специально спрашиваю именно здесь, чтобы избежать чтения этих талмутов...ты еще предложи гуглом воспользоваться


Название: Re: keyPressEvent(), event->key() и QString
Отправлено: crackedmind от Февраль 01, 2010, 14:43
G-virus
иди книжки читай...

Какие книжки?? Я по-моему специально спрашиваю именно здесь, чтобы избежать чтения этих талмутов...ты еще предложи гуглом воспользоваться
no comments...


Название: Re: keyPressEvent(), event->key() и QString
Отправлено: G-virus от Февраль 01, 2010, 22:11
Все спасибо разобрался. Только интересно. Почему не выводить клавиши Shift, Ctrl, Alt, Enter и т.д.


И почему-то не получается хватать клавиши в фоновом режиме. То есть окно должно быть обязательно активно. Как это убрать?


Название: Re: keyPressEvent(), event->key() и QString
Отправлено: Akaiten от Февраль 02, 2010, 09:56
Почему не выводить клавиши Shift, Ctrl, Alt, Enter и т.д.

Правильно, и не будет. Для этого см. QKeyEvent::modifiers(), например:
Код
C++ (Qt)
if (event->modifiers() & Qt::ShiftModifier)
{
 // Нажат shift
}
if (event->modifiers() & Qt::ControlModifier)
{
 // Нажат ctrl
}
if (event->modifiers() & Qt::AltModifier)
{
 // Нажат alt
}
// см. enum Qt::KeyboardModifier
 

И почему-то не получается хватать клавиши в фоновом режиме. То есть окно должно быть обязательно активно. Как это убрать?

Под Windows см. например SetWindowsHookEx.


Название: Re: keyPressEvent(), event->key() и QString
Отправлено: G-virus от Февраль 02, 2010, 13:59
Спасибо! :), а вот еще по поводу QKeyEvent::modifiers(). Там же и остальные клавиши нужно хватать через него? Например F1, Home, Del и т.д. А получится вот таким образом?
Код
C++ (Qt)
void MainWindow::keyPressEvent(QKeyEvent *event)
{
 switch (event->key())
     {
           case Qt::Key_Shift: //нажат Shift;
                                      break;
           case Qt::Key_Alt: //нажат Alt;
                                      break;
              .
              .
              .
           default: break;
     }
}
 


Название: Re: keyPressEvent(), event->key() и QString
Отправлено: Akaiten от Февраль 02, 2010, 15:28
Там же и остальные клавиши нужно хватать через него? Например F1, Home, Del и т.д.

Только Shift, Ctrl (Command on Mac), Alt, Meta key (Control on Mac, Win on Windows), Keypad button (???), Mode_switch key (on X11)


Название: Re: keyPressEvent(), event->key() и QString
Отправлено: G-virus от Февраль 02, 2010, 19:43
Спасибо, разобрался! =)


Название: Re: keyPressEvent(), event->key() и QString
Отправлено: G-virus от Февраль 03, 2010, 00:21
Цитировать
Под Windows см. например SetWindowsHookEx.

Выставляю такие параметры: SetWindowsHookEx(WH_KEYBOARD, NULL, NULL, NULL);. Но нет результата. Без окна, программа не ловит события клавы, может что-то не так выставил?

НУ ПОМОГИИИТТЕЕЕ!!!!  ???