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 信号和事件的区别就在与,事件比信号更加底层,而且如果一个信号对应多个槽的话,信 ...
随机推荐
- .net 程序通过 crontab 无法启动,手动执行脚本可以启动
一.问题描述 .net 网关程序需要设置定时重启,按照日常操作先把正在运行的 PID kill 掉后,再执行启动服务. 把脚本放到 crontab 计划任务上,可以把服务 PID kill 掉,但无法 ...
- C/C++ 结构体字节对齐
在用sizeof运算符求算某结构体所占空间时,并不是简单地将结构体中所有元素各自占的空间相加,这里涉及到内存字节对齐的问题.从理论上讲,对于任何 变量的访问都可以从任何地址开始访问,但是事实上不是如此 ...
- 【LeetCode】999. Available Captures for Rook 解题报告(C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 四方向搜索 日期 题目地址:https://leetc ...
- 【LeetCode】231. Power of Two 解题报告(Java & Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 二进制 位运算 判断是不是最大2的幂的因数 判断因子 ...
- 【九度OJ】题目1109:连通图 解题报告
[九度OJ]题目1109:连通图 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1109 题目描述: 给定一个无向图和其中的 ...
- 【LeetCode】966. Vowel Spellchecker 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 字典 日期 题目地址:https://leetcod ...
- 1048 - Conquering Keokradong
1048 - Conquering Keokradong PDF (English) Statistics Forum Time Limit: 1 second(s) Memory Limit: ...
- Codeforces 450D:Jzzhu and Cities(最短路,dijkstra)
D. Jzzhu and Cities time limit per test: 2 seconds memory limit per test: 256 megabytes input: stand ...
- docker安装minio
目录 一.简介 二.docker安装 三.java中使用minio上传与下载 一.简介 MinIO 是在 GNU Affero 通用公共许可证 v3.0 下发布的高性能对象存储. 它是与 Amazon ...
- mysql数据库主从复制教程
mysql主从复制教程 架构规划: 192.168.201.150 master 主节点 192.168.201.154 slave 从节点 1. 修改mysql的配置文件(主节点,从节点都要修改) ...