QKeyEvent类用来描述一个键盘事件。当键盘按键被按下或者被释放时,键盘事件便会被发送给拥有键盘输人焦点的部件。

QKeyEvent的key()函数可以获取具体的按键,对于Qt中给定的所有按键,可以在帮助中查看Qt: :Key关键字。需要特别说明的是,回车键在这里是Qt::Key_Return;键盘上的一些修饰键,比如Ctrl和Shift等, 这里需要使用QKeyEvent的modifiers()函数来获取,可以在帮助中使用Qt:: KeyboardModifier关键字来査看所有的修饰键。

QKeyEvent有两个键盘事件成员函数:

void QWidget::keyPressEvent(QKeyEvent *event)   //键盘按下事件
void QWidget::keyReleaseEvent(QKeyEvent *event) //键盘松开事件

这两个基本上能够满足一般的需求了,但是前提是已经获得焦点的控件已经获取焦点。具体怎么使用呢?

在头文件.h中进行声明:

protected:
void keyPressEvent(QKeyEvent *event); //键盘按下事件
void keyReleaseEvent(QKeyEvent *event); //键盘松开事件

在.cpp中进行实现相应的功能:

//键盘按下事件
void Widget::keyPressEvent(QKeyEvent * event)
{
switch (event->key())
{
//ESC键
case Qt::Key_Escape:
qDebug() <<"ESC";
break;
//回车键
case Qt::Key_Return:
qDebug() <<"Enter";
break;
//退格键
case Qt::Key_Backspace:
qDebug() <<"Back";
break;
//空格键
case Qt::Key_Space:
qDebug() <<"Space";
break;
//F1键
case Qt::Key_F1:
qDebug() <<"F1";
break;
} //先检测Ctrl键是否按下
if(event->modifiers() == Qt::ControlModifier)
{
//如果是,那么再检测M键是否按下
if(event->key() == Qt::Key_M)
{
//按下则使窗口最大化
this->setWindowState(Qt::WindowMaximized);
}
}
} //键盘释放事件
void Widget::keyReleaseEvent(QKeyEvent *event)
{
//方向UP键
if(event->key() == Qt::Key_Up)
{
qDebug() << "release: "<< "up";
}
}

分别按下ESC、Enter、Backspace、Space、F1键,“应用程序输出”窗口输出如下,另外按Ctrl+M键也能使窗口最大化:

ESC
Enter
Back
Space
F1
release: up

下表列出了所有的修饰键:

Constant Value Description
Qt::NoModifier 0x00000000 No modifier key is pressed.
Qt::NoModifier 0x02000000 A Shift key on the keyboard is pressed.
Qt::ControlModifier 0x04000000 A Ctrl key on the keyboard is pressed.
Qt::AltModifier 0x08000000 An Alt key on the keyboard is pressed.
Qt::MetaModifier 0x10000000 A Meta key on the keyboard is pressed.
Qt::KeypadModifier 0x20000000 A keypad button is pressed.
Qt::GroupSwitchModifier 0x40000000 X11 only. A Mode_switch key on the keyboard is pressed.

Qt事件系统之三:键盘事件的更多相关文章

  1. Qt中的键盘事件,以及焦点的设置(比较详细)

    Qt键盘事件属于Qt事件系统,所以事件系统中所有规则对按键事件都有效.下面关注点在按键特有的部分: focus 一个拥有焦点(focus)的QWidget才可以接受键盘事件.有输入焦点的窗口是活动窗口 ...

  2. QT 11 鼠标键盘事件添加

    鼠标事件 void mousePressEvent(QMouseEvent *event); //单击 void mouseReleaseEvent(QMouseEvent *event); //释放 ...

  3. 初识Qt鼠标、键盘事件及定时器和随机数

    1.新建Qt Gui应用,项目名称为“myEvent”,基类名称为QWidget,类名称为Widget. 2.widget.h文件中添加以下代码,该段代码中包含了三个事件函数和一个槽函数 privat ...

  4. 【2017-06-06】Qt中的键盘事件:QKeyEvent及相关处理函数

    QKeyEvent及其相关的处理函数,比如QKeyPressEvent.QKeyReleaseEvent()等在QtGui编程中非常常用,尤其是需要借助标准键盘的编码来实现一些自定义功能的时候. 这算 ...

  5. QWidget 键盘事件 焦点(QApplication源码)

    在Qt中,键盘事件和QWidget的focus密不可分:一般来说,一个拥有焦点(focus)的QWidget或者grabKeyboard()的QWidget才可以接受键盘事件. 键盘事件派发给谁? 如 ...

  6. QWidget 键盘事件 焦点(源代码级别研究)

    在Qt中,键盘事件和QWidget的focus密不可分:一般来说,一个拥有焦点(focus)的QWidget或者grabKeyboard()的QWidget才可以接受键盘事件. 键盘事件派发给谁? 如 ...

  7. Qt 事件系统浅析 (用 Windows API 描述,分析了QCoreApplication::exec()和QEventLoop::exec的源码)(比起新号槽,事件机制是更高级的抽象,拥有更多特性,比如 accept/ignore,filter,还是实现状态机等高级 API 的基础)

    事件系统在 Qt 中扮演了十分重要的角色,不仅 GUI 的方方面面需要使用到事件系统,Signals/Slots 技术也离不开事件系统(多线程间).我们本文中暂且不描述 GUI 中的一些特殊情况,来说 ...

  8. 【转】Qt鼠标键盘事件

    http://blog.csdn.net/lovebird_27/article/details/50351336 Qt 程序需要在main()函数创建一个QCoreApplication对象,然后调 ...

  9. Qt事件系统之五:事件过滤器和事件的发送

    Qt提供了事件过滤器来实现在一个部件中监控其他多个部件的事件.事件过滤器与其他部件不同,它不是一个类,只是由两个函数组成的一种操作,用来完成一个部件对其他部件的事件的监视.这两个函数分别是 insta ...

随机推荐

  1. IOS开发 APP提交程序上传流程

    由于苹果的机制,在非越狱机器上安装应用必须通过官方的App Store,开发者开发好应用后上传App Store,也需要通过审核等环节.AppCan作为一个跨主流平台的一个开发平台,也对ipa包上传A ...

  2. Python 点滴 I

    [为什么使用Python] 1. 软件质量:   Python更注重软件质量,一致性,可维护性 2. 开发效率:   相比C/C++/Java这些编译/静态语言,无需编译及链接步骤,Python所须要 ...

  3. mac 通过 终端 ssh 远程连接 centos 服务器

    mac 通过 终端 ssh 远程连接 centos 服务器 在终端下输入 ssh -l root 204.74.*.*      就可以连接了,这是端口没变的情况,还是原来的22 ssh -p 448 ...

  4. uml时序图的初印象-------Day64

    近期有好多想法迫不及待的想去实现,但是其实是在那些最開始想的很明确,感觉会没问题的地方也总是会出现故障,导致稍微有些急躁,还是要淡定啊.又到了周末.明后天要收拾东西搬家,不知道宽带能不能顺利的给挪过去 ...

  5. DLR之 ExpandoObject和DynamicObject的使用演示样例

    ExpandoObject :动态的增删一个对象的属性,在低层库(比如ORM)中非常实用.因为ExpandoObject实现了IDictionay<string, object>接口,常见 ...

  6. asp.net mvc 中使用单例

    有这样一个service,需要运行的asp.net站点上,但要保证这个实例是唯一的.单例用来启用聊天机器人,保证唯一,以免启动多个,造成客户端发送消息的时候,会造成每个机器人都发送消息,app收到多条 ...

  7. Win32 Windows编程 七

    定时器消息 1. WM_TIMER 依照定时器设置的时间段,自己主动向窗体发送一个定时器消息WM_TIMER.优先级比較低 定时器精度比較低.毫秒级别.消息产生时间也精度比較低 2 .消息和函数 WM ...

  8. bash builtin eval

    1 在开始执行eval后面的命令之前eval主要做了哪些事情 1.1 去掉反斜杠的quoting 比如\$ac_optarg,会变成$ac_optarg. 1.2 去掉单引号的quoting 比如: ...

  9. iptraf 网卡 ip 端口 监控 netstat 关闭端口方法

    18 commands to monitor network bandwidth on Linux server – BinaryTides https://www.binarytides.com/l ...

  10. solr入门之多线程操作solr中索引字段的解决

    涉及的问题: 建索引时有一个字段是该词语出现的次数,这个字段是放在solr里的  而我用的是多线程来进行全量导入的,这里就涉及到了多线程问题 多个线程操作同一个变量时怎样处理? 我是这样子做的 : 首 ...