QT之键盘事件
Widget.h:
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include<QKeyEvent>
#include "mypushbutton.h"
class Widget : public QWidget
{
Q_OBJECT public:
Widget(QWidget *parent = 0);
~Widget();
void keyPressEvent(QKeyEvent* e);
void keyReleaseEvent(QKeyEvent* e);
private:
MyPushButton *p1;
MyPushButton *p2;
}; #endif // WIDGET_H
mypushbutton.h:
#ifndef MYPUSHBUTTON_H
#define MYPUSHBUTTON_H #include <QPushButton>
class MyPushButton : public QPushButton
{
Q_OBJECT
public:
explicit MyPushButton(const QString& text,QWidget *parent = nullptr);
void keyPressEvent(QKeyEvent* e);
void keyReleaseEvent(QKeyEvent* e);
signals: public slots:
}; #endif // MYPUSHBUTTON_H
mypushbutton.cpp:
#include "mypushbutton.h"
#include<QKeyEvent>
#include<QDebug>
MyPushButton::MyPushButton(const QString& text,QWidget *parent)
:QPushButton(text,parent){}
void MyPushButton::keyPressEvent(QKeyEvent* e)
{
//e->modifiers() 修饰键
if(e->modifiers()&Qt::ControlModifier)
{
qDebug()<<"子类的Ctrl被按下了"<<endl;
}
if(e->modifiers()&Qt::AltModifier)
{
qDebug()<<"子类的Alt被按下了"<<endl;
}
switch(e->key())
{
case Qt::Key_A:
qDebug()<<__FUNCTION__<<e->text()<<endl;
break;
case Qt::Key_D:
qDebug()<<__FUNCTION__<<e->text()<<endl;
break;
}
}
void MyPushButton::keyReleaseEvent(QKeyEvent* e)
{ }
widget.cpp:
#include "widget.h"
#include<QDebug>
#include "mypushbutton.h"
#include<QVBoxLayout>
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
p1=new MyPushButton("按钮1",this);
p2=new MyPushButton("按钮2",this);
QVBoxLayout *s=new QVBoxLayout(this);
s->addWidget(p1);
s->addWidget(p2);
//this->setFocus(); //本来是子窗口接受键盘事件,现在设置焦点窗口为父窗口
this->setFocus(Qt::OtherFocusReason); //按tab键可以实现在两个按钮之间来回切换
} void Widget::keyPressEvent(QKeyEvent* e)
{ //e->modifiers() 修饰键
if(e->modifiers()&Qt::ControlModifier)
{
qDebug()<<"Ctrl被按下了"<<endl;
}
if(e->modifiers()&Qt::AltModifier)
{
qDebug()<<"Alt被按下了"<<endl;
}
switch(e->key())
{
case Qt::Key_A:
qDebug()<<e->text()<<endl;
break;
case Qt::Key_D:
qDebug()<<e->text()<<endl;
break; }
}
void Widget::keyReleaseEvent(QKeyEvent* e)
{ } Widget::~Widget()
{ }
main.cpp:
#include "widget.h"
#include <QApplication> int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show(); return a.exec();
}
效果:

QT之键盘事件的更多相关文章
- Qt之键盘事件监听-实时响应大小写Capslock按键
目录 一.开篇 二.效果展示 三.实现思路 1.重写QLlinEdit 2.全局应用程序事件 3.windows钩子 四.相关文章 原文链接:Qt之键盘事件监听-实时响应大小写Capslock按键 一 ...
- 【转】Qt鼠标键盘事件
http://blog.csdn.net/lovebird_27/article/details/50351336 Qt 程序需要在main()函数创建一个QCoreApplication对象,然后调 ...
- Qt中的键盘事件,以及焦点的设置(比较详细)
Qt键盘事件属于Qt事件系统,所以事件系统中所有规则对按键事件都有效.下面关注点在按键特有的部分: focus 一个拥有焦点(focus)的QWidget才可以接受键盘事件.有输入焦点的窗口是活动窗口 ...
- QT 11 鼠标键盘事件添加
鼠标事件 void mousePressEvent(QMouseEvent *event); //单击 void mouseReleaseEvent(QMouseEvent *event); //释放 ...
- 初识Qt鼠标、键盘事件及定时器和随机数
1.新建Qt Gui应用,项目名称为“myEvent”,基类名称为QWidget,类名称为Widget. 2.widget.h文件中添加以下代码,该段代码中包含了三个事件函数和一个槽函数 privat ...
- Qt事件系统之三:键盘事件
QKeyEvent类用来描述一个键盘事件.当键盘按键被按下或者被释放时,键盘事件便会被发送给拥有键盘输人焦点的部件. QKeyEvent的key()函数可以获取具体的按键,对于Qt中给定的所有按键,可 ...
- QT无窗口状态下对键盘事件的监听
Question:最近在搞linux下的一个客户端项目,需要接收键盘事件,但是又不能有界面,这种情况怎么处理呢? int main(int argc, char *argv[]) { QApplica ...
- QWidget 键盘事件 焦点(QApplication源码)
在Qt中,键盘事件和QWidget的focus密不可分:一般来说,一个拥有焦点(focus)的QWidget或者grabKeyboard()的QWidget才可以接受键盘事件. 键盘事件派发给谁? 如 ...
- Qt中的事件
1. 引自---http://blog.sina.com.cn/s/blog_6e80f1390100pro4.html 信号和事件的区别就在与,事件比信号更加底层,而且如果一个信号对应多个槽的话,信 ...
随机推荐
- Java的运行机制
Java程序运行机制 编译型(操作系统 c/c++) 解释型(网页 不追求速度) 程序运行机制
- 【LeetCode】320. Generalized Abbreviation 解题报告 (C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 DFS 日期 题目地址:https://leetcod ...
- 【九度OJ】题目1144:Freckles 解题报告
[九度OJ]题目1144:Freckles 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1144 题目描述: In an ...
- 【LeetCode】190. Reverse Bits 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 解题方法 二进制字符串翻转 位运算 日期 题目地址:https://le ...
- The All-purpose Zero(hdu5773)
The All-purpose Zero Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Oth ...
- (数据科学学习手札133)利用geopandas绘制拓扑着色地图
本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 我们在绘制某些地图时,为了凸显出每个独立的 ...
- Codeforces 777C:Alyona and Spreadsheet(预处理)
During the lesson small girl Alyona works with one famous spreadsheet computer program and learns ho ...
- Spring企业级程序设计 • 【第6章 深入Spring MVC开发】
全部章节 >>>> 本章目录 6.1 模型数据解析及控制器返回值 6.1.1 ModelAndView多种用法 6.1.2 Map添加模型数据和返回String类型值 6 ...
- Java高级程序设计笔记 • 【第4章 网络编程】
全部章节 >>>> 本章目录 4.1 网络基础知识 4.1.1 IP地址 4.1.2 端口号 4.1.3 使用InetAddress 4.1.4 InetAddress 类 ...
- 物联网大赛 - Android学习笔记(一) Android概念
一.Android 概念 Android是开放式的手机和电脑操作系统,是基于Linux系统做的上层开发. android可以做些什么? Android可以开发各种手机应用APP,也可以开发车载系统等, ...