前言:
转载请附上连接,本帖原创请勿照抄。
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