STSPIN32G4高集成方案:FOC电机控制从选型到调试全实践
2026/10/18 17:03:38
按键事件在用户按下一个键时触发,在Qt中使用QKeyEvent类表示这种事件。当按下一个键时,Qt会自动创建一个QKeyEvent对象,并将其传递给相应的事件处理函数。QKeyEvent对象包含该事件的详细信息
键值是一个枚举值,用于表示被按下的键
Qt::key_A、Qt::key_B、Qt::key_CQt::key_0``Qt::key_1``Qt::key_2Qt::key_F1``Qt::key_F2``Qt::key_F3Qt::key_Left``Qt::key_Right``Qt::key_Up``Qt::key_DownQt::key_Enter``Qt::key_Escape``Qt::key_Space``Qt::key_Tab键值可以用QKeyEvent::key()获得
Shift、Ctrl、AltQt::shiftModifier:Shift键Qt::ControlModifier:Ctrl键Qt::AltModifier:Alt键Qt::MetaModifier:Windows键或者Command键QKeyEvent类同时表示按键事件和释放事件 释放事件在用户松开一个键时触发,在Qt中使用QKeyEvent类表示这种事件,事件类型不同。通过这种方式,把按键事件和释放键事件统一处理,从而化简事件处理逻辑。
处理键盘事件通常通过重写按键事件和释放事件的处理函数来实现
widget.h
#ifndefWIDGET_H#defineWIDGET_H#include<QWidget>#include<QPushButton>QT_BEGIN_NAMESPACEnamespaceUi{classWidget;}QT_END_NAMESPACEclassWidget:publicQWidget{Q_OBJECTpublic:Widget(QWidget*parent=nullptr);~Widget();QPushButton*btn;protected://定义键盘按下事件voidkeyPressEvent(QKeyEvent*);private:Ui::Widget*ui;};#endif// WIDGET_Hwidget.cpp
#include"widget.h"#include"ui_widget.h"#include<QString>#include<QKeyEvent>Widget::Widget(QWidget*parent):QWidget(parent),ui(newUi::Widget){ui->setupUi(this);// 定义窗口与标题this->setWindowTitle(QString::fromLocal8Bit("键盘事件处理"));// 定义窗口大小为400*200,左上角的坐标显示在屏幕的50,50位置this->setGeometry(50,50,400,200);// 实例化按钮,定义上面文字为“可移动”btn=newQPushButton(QString::fromLocal8Bit("可移动"),this);btn->setGeometry(40,40,60,30);// 强迫Widget接收待定的按键信息(例如方向键),否则Widget不接收方向键信息setFocusPolicy(Qt::StrongFocus);}Widget::~Widget(){deleteui;}voidWidget::keyPressEvent(QKeyEvent*event){intx=btn->x();inty=btn->y();// 按键重复时不做处理,也就是屏蔽if(event->isAutoRepeat())return;// 通过event->key()读取键值switch(event->key()){caseQt::Key_Up:btn->move(x,y-10);break;caseQt::Key_Down:btn->move(x,y+10);break;caseQt::Key_Right:btn->move(x+10,y);break;caseQt::Key_Left:btn->move(x-10,y);break;caseQt::Key_N:if(event->modifiers()==Qt::ControlModifier){// 按下Ctrl+N,当前窗口中最大化setWindowState(Qt::WindowMaximized);}break;}QWidget::keyPressEvent(event);}