Russian Qt Forum

Qt => Общие вопросы => Тема начата: RuZ от Июль 29, 2010, 14:05



Название: определить коды нескольких зажатых клавиш
Отправлено: 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() возвращает код только последней нажатой клавиши.


Название: Re: определить коды нескольких зажатых клавиш
Отправлено: Kolobok от Июль 29, 2010, 14:58
Возвращается код клавиши, вызвавшей event.
Цитировать
int QKeyEvent::key () const
Returns the code of the key that was pressed or released.


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


Название: Re: определить коды нескольких зажатых клавиш
Отправлено: RuZ от Июль 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 все время есть список нажатых клавиш.