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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: определить коды нескольких зажатых клавиш  (Прочитано 3105 раз)
RuZ
Гость
« : Июль 29, 2010, 14:05 »

Как отследить какие клавиши зажаты в данный момент?
Код
C++ (Qt)
void MainWindow::keyPressEvent(QKeyEvent* event){
  ui->textBrowser->append(QString::number(event->nativeVirtualKey()));
}
Если клавиша зажаты 2 клавиши (обыкновенные, не модификаторы, например, клавиши w и s), то метод event->nativeVirtualKey() постоянно возвращает код последней зажатой клавиши.
Я пытался решить это записывая в буффер коды нажатых клавиш, но не возможно понять когда следует удалить его из буфера тк в методе keyReleaseEvent тоже event->nativeVirtualKey() возвращает код только последней нажатой клавиши.
« Последнее редактирование: Июль 29, 2010, 14:16 от RuZ » Записан
Kolobok
Гость
« Ответ #1 : Июль 29, 2010, 14:58 »

Возвращается код клавиши, вызвавшей event.
Цитировать
int QKeyEvent::key () const
Returns the code of the key that was pressed or released.
Записан
RuZ
Гость
« Ответ #2 : Июль 29, 2010, 15:16 »

nativeVirtualKey и key это почти одно и тоже просто первая не зависит от раскладки клавиатуры.
Это не решает проблему, мне нужно постоянно вызывать функцию в которую передается список зажатых в данный момент клавиш. Как это можно реализовать?
Записан
RuZ
Гость
« Ответ #3 : Июль 29, 2010, 16:09 »

все, решил проблему
Код
C++ (Qt)
void MainWindow::printkey(){
   QMap <int,bool>::iterator it=presskey.begin();
   ui->textBrowser->clear();
   for(;it!=presskey.end();++it){
       ui->textBrowser->append(QString::number(it.key()));
       ui->textBrowser->append(QString::number(it.value()));
   }
}
 
void MainWindow::keyPressEvent(QKeyEvent* event){
   if(!event->isAutoRepeat()){
      presskey.insert(event->nativeVirtualKey(),true);
   }
   printkey();
}
 
void MainWindow::keyReleaseEvent(QKeyEvent* event){
   if(!event->isAutoRepeat()){
        presskey.remove(event->nativeVirtualKey());
   }
   printkey();
}
В QMap все время есть список нажатых клавиш.
« Последнее редактирование: Июль 29, 2010, 16:13 от RuZ » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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