Russian Qt Forum
Ноябрь 26, 2024, 17:28 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: keyPressEvent(), event->key() и QString  (Прочитано 17148 раз)
G-virus
Гость
« : Февраль 01, 2010, 00:55 »

Как можно присвоить нажатую клавишу к строке. Допустим, чтобы при нажатии клавиши, производился ее вывод?
Записан
SABROG
Гость
« Ответ #1 : Февраль 01, 2010, 01:13 »

Уточни. Вывод куда? Какое значение ты хочеш получить?
- в виде текста, нажал на Ф - получил "Ф"
- в виде сканкода с клавиатуры (HEX в строке)
- в виде названия перечисления (Qt::Key_A)
Записан
G-virus
Гость
« Ответ #2 : Февраль 01, 2010, 01:25 »

Уточни. Вывод куда? Какое значение ты хочеш получить?
- в виде текста, нажал на Ф - получил "Ф"
- в виде сканкода с клавиатуры (HEX в строке)
- в виде названия перечисления (Qt::Key_A)

в виде текста. нажал на "Ф" - получил "Ф" Улыбающийся. Вывод QMessageBox и запись в текстовый файл
Записан
SABROG
Гость
« Ответ #3 : Февраль 01, 2010, 01:53 »

QString QKeyEvent::text () const

Остальное в документации.
Записан
G-virus
Гость
« Ответ #4 : Февраль 01, 2010, 01:56 »

QString QKeyEvent::text () const

Хм..... Че-То я вообще не понял этой строки  Непонимающий Можно пояснение плизз, что она вообще сделала?
Записан
Aleksey_Zh
Гость
« Ответ #5 : Февраль 01, 2010, 11:36 »

Т.е. отлавливаешь событие, возникающее по QKeyEvent. А потом его конвертишь в текст
Записан
G-virus
Гость
« Ответ #6 : Февраль 01, 2010, 14:35 »

Т.е. отлавливаешь событие, возникающее по QKeyEvent. А потом его конвертишь в текст

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

Не так ли случайно? Просто вот так не работает) А иначе не понимаю как..странно
Записан
crackedmind
Гость
« Ответ #7 : Февраль 01, 2010, 14:39 »

G-virus
иди книжки читай...
Записан
G-virus
Гость
« Ответ #8 : Февраль 01, 2010, 14:40 »

G-virus
иди книжки читай...

Какие книжки?? Я по-моему специально спрашиваю именно здесь, чтобы избежать чтения этих талмутов...ты еще предложи гуглом воспользоваться
Записан
crackedmind
Гость
« Ответ #9 : Февраль 01, 2010, 14:43 »

G-virus
иди книжки читай...

Какие книжки?? Я по-моему специально спрашиваю именно здесь, чтобы избежать чтения этих талмутов...ты еще предложи гуглом воспользоваться
no comments...
Записан
G-virus
Гость
« Ответ #10 : Февраль 01, 2010, 22:11 »

Все спасибо разобрался. Только интересно. Почему не выводить клавиши Shift, Ctrl, Alt, Enter и т.д.


И почему-то не получается хватать клавиши в фоновом режиме. То есть окно должно быть обязательно активно. Как это убрать?
« Последнее редактирование: Февраль 01, 2010, 22:49 от G-virus » Записан
Akaiten
Гость
« Ответ #11 : Февраль 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.
Записан
G-virus
Гость
« Ответ #12 : Февраль 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;
     }
}
 
Записан
Akaiten
Гость
« Ответ #13 : Февраль 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)
Записан
G-virus
Гость
« Ответ #14 : Февраль 02, 2010, 19:43 »

Спасибо, разобрался! =)
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.104 секунд. Запросов: 21.