当前位置:首页 >> 智能终端演进 >> 【Qt开发流程】之事件系统3:键盘事件,amd athlon

【Qt开发流程】之事件系统3:键盘事件,amd athlon

cpugpu芯片开发光刻机 智能终端演进 1
文件名:【Qt开发流程】之事件系统3:键盘事件,amd athlon 【Qt开发流程】之事件系统3:键盘事件 序章

以下链接是拖放事件介绍和使用示例: 【Qt开发流程】之拖放操作1:介绍链接: https://blog.csdn.net/MrHHHHHH/article/details/134626484 【Qt开发流程】之拖放操作2:使用链接: https://blog.csdn.net/MrHHHHHH/article/details/134632006 以下链接是事件系统及键盘事件描述及示例: 【Qt开发流程】之事件系统1:事件系统描述及事件发生流程链接: https://blog.csdn.net/MrHHHHHH/article/details/134722922 【Qt开发流程】之事件系统2:鼠标事件及滚轮事件链接: https://blog.csdn.net/MrHHHHHH/article/details/134756089

键盘事件

QKeyEvent类描述一个键盘事件。 当键盘有键按下或者释放时,键盘事件便会被发送给拥有输入焦点的部件。 关键事件包含一个特殊的接受标志,指示接收方是否将处理该关键事件。这个标志默认情况下是为QEvent::KeyPress和QEvent::KeyRelease设置的,所以在处理键事件时不需要调用accept()。对于QEvent::ShortcutOverride,接收者需要显式地接受事件来触发覆盖。在键事件上调用ignore()将把它传播到父小部件。事件沿着父小部件链向上传播,直到小部件接受它或事件过滤器使用它。 QWidget::setEnabled()函数可用于启用或禁用小部件的鼠标和键盘事件。 事件处理程序QWidget::keyPressEvent()、QWidget::keyReleaseEvent()、QGraphicsItem::keyPressEvent()和QGraphicsItem::keyReleaseEvent()接收关键事件。 QKeyEvent的key()函数可以获得具体的按键,按键类型在Qt::Key枚举中。 如: 需注意: 如Ctrl和Shift键,需要使用modifiers()函数获取。

示例

以下是一个使用键盘事件的示例。 实现组合键控制控件移动。 mainwindow.h

#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>namespace Ui {class MainWindow;}class MainWindow : public QMainWindow{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = nullptr);~MainWindow();protected:void keyPressEvent(QKeyEvent *event);void keyReleaseEvent(QKeyEvent *event);private:Ui::MainWindow *ui;bool bIsUp = false;bool bIsRight = false;bool bMove = false;};#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"#include "ui_mainwindow.h"#include <QKeyEvent>MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow){ui->setupUi(this);setFocus();}MainWindow::~MainWindow(){delete ui;}void MainWindow::keyPressEvent(QKeyEvent *event){if(event->modifiers() == Qt::ControlModifier){if(event->key() == Qt::Key_M)setWindowState(Qt::WindowMaximized);if(event->key() == Qt::Key_N){setWindowState(Qt::WindowNoState);}}else if(event->type() == QEvent::KeyPress){switch (event->key()) {case Qt::Key_Up:{if(event->isAutoRepeat())return;bIsUp = true;}break;case Qt::Key_Right:{if(event->isAutoRepeat())return;bIsRight = true;}break;default:break;}}QMainWindow::keyPressEvent(event);}void MainWindow::keyReleaseEvent(QKeyEvent *event){switch (event->key()) {case Qt::Key_Up:{if(event->isAutoRepeat())return;bIsUp = false;if(bMove){bMove = false;return;}if(bIsRight){ui->pushButton->move(ui->pushButton->pos().x() + 10, ui->pushButton->pos().y() + 10);bMove = true;}else {ui->pushButton->move(80, 60);}}break;case Qt::Key_Right:{if(event->isAutoRepeat())return;bIsRight = false;if(bMove){bMove = false;return;}if(bIsUp){ui->pushButton->move(ui->pushButton->pos().x() + 10, ui->pushButton->pos().y() + 10);bMove = true;}else {ui->pushButton->move(80, 60);}}break;default:{}break;}QMainWindow::keyReleaseEvent(event);}

以上代码解释:

keyPressEvent()重载,处理键盘按下事件,当重复按下时,返回,记录按下状态keyReleaseEvent()重载,处理键盘释放事件,当按下向上的同时,按下向右键,控件会在x , y 的基础上右下偏移10个像素当只有一个按键时,控件恢复到默认坐标 效果

因为自动重复返回了,所以效果会不是那么好。

键盘事件

结论

为什么一看书,就困呢?因为书,是梦开始的地方。

协助本站SEO优化一下,谢谢!
关键词不能为空
同类推荐
«    2025年12月    »
1234567
891011121314
15161718192021
22232425262728
293031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
文章归档
网站收藏
友情链接