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获取文件byte数组并输出进行展示和文件下载
/** * 文件下载 */ @GetMapping(value = "/download") public void download(HttpServletResponse re ...
- Linux(centos7)设置docker服务开机自启动以及容器自启动
docker服务开机自启动 systemctl enable docker 设置容器自启动 可以在运行的时候通过设置--restart 参数 docker run --restart always - ...
- IDEA版本2020.1全局MAVEN配置
我们用IDEA打开项目有时候要每次配置maven地址,这样就很麻烦 我们可以直接设置全局的 这样所有新打开的项目都能使用
- 【LeetCode】172. Factorial Trailing Zeroes 解题报告(Java & Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 递归 循环 日期 题目描述 Given an integer ...
- 【LeetCode】69. Sqrt(x) 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 方法一:库函数 方法二:牛顿法 方法三:二分查找 日 ...
- codeforce-601A. The Two Routes(最短路)
题意: 给你N个点表示N个站,有汽车和火车,汽车只能走公路,火车只能走铁路. 然后给你M条双向路,代表这两个点之间有铁路连接. 然后告诉你如果两个点之间没有铁路,那么就是公路连接. 问你汽车和火车都到 ...
- 1164 - Horrible Queries
1164 - Horrible Queries PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 64 M ...
- CS5210设计HDMI to VGA方案|CS5210资料|CS5210设计电路方案
CS5210是一款HDMI转VGA转换器方案,其输出VGA信号可送到CRT/LED显示器,及投影机等,输入HDMI信号可以驳接电脑.PS3,XBOX360.蓝光DVD,输出VGA可以CRT/LED显示 ...
- CS5216PIN TO PIN替换PS8402A方案|PS8402A电路设计原理图|CS5216芯片
PS8402A是HDMI 电平移位器/中继器专为2型双模Display Port(DP++)电缆适配器应用而设计.它设计用于Display Port到DVI或Display Port到HDMI的2型适 ...
- mysql总结笔记 -- 索引篇
索引的作用 索引是用来高效的获取数据的 排好序 的 数据结构,如果没有索引,可能会导致查询某一条记录的时候遍历整张表:所以适当的索引可以大大的提升检索速度: 索引的数据结构 二叉树 假如说我们有一列数 ...