前言:
转载请附上连接,本帖原创请勿照抄。
QT检测按键需要了解的地方有两块地方:1、键盘值;2、键盘事件、组合键、组合键响应方法
Demo演示:接下来会将详细步骤。
一、键盘值
先了解各个键位的值,然后再写代码。参考自:https://blog.csdn.net/weixin_42692504/article/details/95116279
二、如何捕获键盘按下、弹起、组合键、大小写事件、组合键响应方法
1.键盘按下、弹起事件
mainwindow.h
//引入头 #include <QKeyEvent> //重写 /* * keyPressEvent 按钮按下事件 * keyReleaseEvent 按钮弹起事件 * *k * event 的意思是大家后面的变量可以自由发挥 */ void keyPressEvent( QKeyEvent *k ); void keyReleaseEvent( QKeyEvent * event);mainwindow.cpp
#include <QMessageBox> //加入utf-8防止汉字乱码 #pragma execution_character_set("utf-8") //构造函数初始化部分加入 this->grabKeyboard(); //键盘按下事件 void MainWindow::keyPressEvent( QKeyEvent *k ) { QString QKeyMenu=""; const char *keyA="a"; if(k->key() == Qt::Key_A) { QKeyMenu=k->key(); ui->textEdit->insertPlainText(QKeyMenu +='\n'); } else if(k->key() == Qt::Key_B) { QKeyMenu=k->key(); ui->textEdit->insertPlainText(QKeyMenu +='\n'); } else if(k->key() == Qt::Key_C) { QKeyMenu=k->key(); ui->textEdit->insertPlainText(QKeyMenu +='\n'); } } //键盘弹起事件 void MainWindow::keyReleaseEvent( QKeyEvent * event) { QString QKeyMenu=""; const char *keyA="a"; if (event->key() == Qt::Key_CapsLock) { QKeyMenu="CapsLock键弹起"; ui->textEdit->insertPlainText(QKeyMenu +='\n'); } //保持编辑器在光标最后一行 QTextCursor cursor=ui->textEdit->textCursor(); cursor.movePosition(QTextCursor::End); ui->textEdit->setTextCursor(cursor); }2.组合键、大小写事件
看下面代码有处问题需要注意,在JPG演示的时候单独按下CapsLock键“按下”没有响应,弹起出发了事件。这是因为单独的按键监听需要放在组合键之前,组合键会触发按钮单独响应。
大小写问题,界面一开始处于汉语输入法一般情况先按Shift键切换英文然后再按CapsLock键切换大写,可以建立全局变量根据CapsLock按下次数来判断是否大小写。
else if(k->key() == Qt::Key_Control) //ctrl键 { QKeyMenu="ctrl键按下"; ui->textEdit->insertPlainText(QKeyMenu +='\n'); } else if(k->key() == Qt::Key_Alt) //左侧alt键 { QKeyMenu="左侧alt键按下"; ui->textEdit->insertPlainText(QKeyMenu +='\n'); } else if(k->key() == Qt::Key_AltGr) //右侧alt键 { QKeyMenu="右侧alt键按下"; ui->textEdit->insertPlainText(QKeyMenu +='\n'); } //检测Ctri+CapsLock组合键 和 CapsLock大小写键 if ((k->modifiers() == Qt::ControlModifier) && (k->key() == Qt::Key_CapsLock)) { QKeyMenu="组合键ctrl+CapsLock"; ui->textEdit->insertPlainText(QKeyMenu +='\n'); } else if (k->key() == Qt::Key_CapsLock) //CapsLock 大小写 { QKeyMenu="0"; QKeyMenu+=k->nativeModifiers() & Qt::Key_CapsLock; ui->textEdit->insertPlainText(QKeyMenu +='\n'); } //保持编辑器在光标最后一行 QTextCursor cursor=ui->textEdit->textCursor(); cursor.movePosition(QTextCursor::End); ui->textEdit->setTextCursor(cursor);3.组合按键响应方法
//按键+鼠标组合,例如ctrl+左击(先ctrl后左击触发,先左击后ctrl不可触发): if ((QApplication::keyboardModifiers() == Qt::ControlModifier) && (event->button() == Qt::LeftButton)) { QMessageBox::aboutQt(NULL, "aboutQt"); } //按键+鼠标组合方法2,例如A+左击(先A后左击,先左击后A均可触发): if ((event->key() == Qt::Key_A) && (QApplication::mouseButtons() == Qt::LeftButton)) { QMessageBox::aboutQt(NULL, "aboutQt"); } //按键+按键组合,例如ctrl+字母(先ctrl后A触发,先A后ctrl不可触发): if ((event->modifiers() == Qt::ControlModifier) && (event->key() == Qt::Key_A)) { QMessageBox::aboutQt(NULL, "aboutQt"); }三、其它文章
这么多记不住怎么办,赶紧点收藏呀~,页面右下角五角星收藏。
下载链接:https://download.csdn.net/download/qq_37529913/13008300
传送门:https://blog.csdn.net/qq_37529913/article/details/106765916
全面的QT 样式表:https://blog.csdn.net/qq_37529913/article/details/108735409