键盘按下事件
键盘按下时,触发该事件,对应的子类为QKeyEvent
对应的事件类型为:QEvent::KeyPress
需要重写的函数为:
void keyPressEvent(QKeyEvent* event) override;
键盘释放事件
键盘抬起时,触发该事件,对应的子类为QKeyEvent
对应的事件类型为:QEvent::KeyRelease
需要重写的函数为:
void keyReleaseEvent(QKeyEvent* event) override;
QKeyEvent常用方法
event->key()//判断按下了那个按键
event->modifiers()//作用见代码
举例
class KeyboardEvent : public QWidget
{
Q_OBJECT
public:
explicit KeyboardEvent(QWidget *parent = nullptr):QWidget{parent}{}
protected:
void keyPressEvent(QKeyEvent* event) override
{
//一般是根据按下的按键做对应的逻辑处理
//判断按下了1个键
switch (event->key()) {
case Qt::Key_Up:
qDebug()<<"按下了:up";
break;
case Qt::Key_A:
qDebug()<<"按下了:A";
break;
case Qt::Key_1:
qDebug()<<"按下了:1";
break;
case Qt::Key_Shift:
qDebug()<<"按下了:Shift";
break;
default:
break;
}
//判断按下了2个键
//一般都是shit、alt、Ctrl等键和其他键一起按
if(event->modifiers()==Qt::ShiftModifier && event->key()==Qt::Key_A)
{
qDebug()<<"按下了:shift+A";
}
if(event->modifiers()==Qt::AltModifier && event->key()==Qt::Key_A)
{
qDebug()<<"按下了:alt+A";
}
if(event->modifiers()==Qt::ControlModifier && event->key()==Qt::Key_A)
{
qDebug()<<"按下了:ctrl+A";
}
//判断按下了3个按键
//使用或进行连接
if(event->modifiers()==(Qt::ControlModifier|Qt::ShiftModifier)
&&event->key()==Qt::Key_B)
{
qDebug()<<"按下了:ctrl+shift+B";
}
}
void keyReleaseEvent(QKeyEvent* event) override
{
//同鼠标按下同理,差不多
}
};
若有错误·,欢迎指正!