#include "MyWidget.h"
#include <QApplication>
#include <QEvent>
#include <QDebug>
#include <QMouseEvent>//子类
#include <QKeyEvent>
#include <QVBoxLayout> MyWidget::MyWidget(QWidget *parent) : QWidget(parent)
{
QVBoxLayout* lay = new QVBoxLayout(this);
#if 0
QPushButton* button2;
lay->addWidget(button = new QPushButton("OK", this));
lay->addWidget(button2 = new QPushButton("Button2"));
//按钮接收键盘信息,而不仅是鼠标
button->setDefault(true);//空格键
this->setMouseTracking(true);//鼠标不需要按住,mouseMove就能得到调用 connect(button, SIGNAL(clicked()), this, SLOT(slotButtonClicked()));//单击,接收信号
connect(button2, SIGNAL(clicked()), this, SLOT(slotButtonClicked()));
#endif
lay->addWidget(edit = new QLineEdit());
connect(edit, SIGNAL(returnPressed()),this ,SLOT(slotButtonClicked()));
}
void MyWidget::slotButtonClicked()//槽函数
{
//QPushButton* button = (QPushButton*)sender();
QLineEdit* button = (QLineEdit*)sender();
qDebug() << button->text();//可以知道那个按钮被操作
}
/* 任何信息都是QApplication先得到-》具体应该处理的窗口::event()->event()根据信息类型来调用具体的虚函数*/
/* 1)可以重载具体的虚函数,来实现对消息的响应
* 2)可以重载event函数,用来处理或者截取消息*/
/*截取消息*/
bool MyWidget::event(QEvent *ev) //重载event函数
{
/*
if (ev->type() == QEvent::MouseButtonPress) //
{
QMouseEvent* ev1 = (QMouseEvent*)ev; //强制类型转换QEvent 转 QMouseEvent
qDebug() << "mouse press";
}
*/
//if(ev->type() == QEvent::MouseButtonPress)//截断
// return true;
ev->accept(); return QWidget::event(ev);//父类的虚函数
} void MyWidget::closeEvent(QCloseEvent *)//关闭窗口后发送
{
qDebug() << "closeEvent";
} void MyWidget::mousePressEvent(QMouseEvent *ev)
{
#if 0
QPoint pt = ev->pos();
qDebug() << pt;
if (ev->button() == Qt::LeftButton)
{ }
if (ev->modifiers() == Qt::ShiftModifier)
{
qDebug() << "shift press";
}
#endif
if(ev->button() == Qt::LeftButton)//左键
{
if (ev->modifiers()==Qt::ControlModifier)//ctrl
{
return;
}
}
else
{}
}
void MyWidget::mouseReleaseEvent(QMouseEvent *)
{}
void MyWidget::mouseMoveEvent(QMouseEvent *)
{
static int i = ;
qDebug() << "mouse move"<<i++;
}
void MyWidget::keyPressEvent(QKeyEvent *ev)
{
ev->modifiers();
int key = ev->key();
qDebug() << key;
char a = key;
qDebug() << (char)a;
}
void MyWidget::keyReleaseEvent(QKeyEvent *)
{}
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
MyWidget w;
w.show(); return app.exec();
}
 #ifndef MYWIDGET_H
#define MYWIDGET_H #include <QWidget>
#include <QPushButton>
#include <QLineEdit>
class MyWidget : public QWidget
{
Q_OBJECT
public:
explicit MyWidget(QWidget *parent = nullptr); /* widget's event handler (all event) */
bool event(QEvent *);//函数原型 void mousePressEvent(QMouseEvent *);
void mouseReleaseEvent(QMouseEvent *);
void mouseMoveEvent(QMouseEvent *);
/*不要用*/
//void mouseDoubleClickEvent(QMouseEvent *); void keyPressEvent(QKeyEvent *);
void keyReleaseEvent(QKeyEvent *); void closeEvent(QCloseEvent *); //void showEvent(QShowEvent *);
//void hideEvent(QHideEvent *); QPushButton* button;
QLineEdit* edit; signals: public slots:
void slotButtonClicked();
}; #endif // MYWIDGET_H
HEADERS += \
MyWidget.h SOURCES += \
MyWidget.cpp QT += widgets gui

一部分关于按钮消息,另一部分关于文本输入。

Qt5学习笔记(消息基础)的更多相关文章

  1. Qt5学习笔记(基础)

    按钮 #include <QApplication> /*应用程序抽象类*/ #include <QWidget> //窗口类 #include <QPushButton ...

  2. MyBatis:学习笔记(1)——基础知识

    MyBatis:学习笔记(1)--基础知识 引入MyBatis JDBC编程的问题及解决设想 ☐ 数据库连接使用时创建,不使用时就释放,频繁开启和关闭,造成数据库资源浪费,影响数据库性能. ☐ 使用数 ...

  3. bootstrap学习笔记之基础导航条 http://www.imooc.com/code/3111

    基础导航条 在Bootstrap框中,导航条和导航从外观上差别不是太多,但在实际使用中导航条要比导航复杂得多.我们先来看导航条中最基础的一个--基础导航条. 使用方法: 在制作一个基础导航条时,主要分 ...

  4. Storm学习笔记 - 消息容错机制

    Storm学习笔记 - 消息容错机制 文章来自「随笔」 http://jsynk.cn/blog/articles/153.html 1. Storm消息容错机制概念 一个提供了可靠的处理机制的spo ...

  5. Django学习笔记(基础篇)

    Django学习笔记(基础篇):http://www.cnblogs.com/wupeiqi/articles/5237704.html

  6. C#学习笔记(基础知识回顾)之值类型与引用类型转换(装箱和拆箱)

    一:值类型和引用类型的含义参考前一篇文章 C#学习笔记(基础知识回顾)之值类型和引用类型 1.1,C#数据类型分为在栈上分配内存的值类型和在托管堆上分配内存的引用类型.如果int只不过是栈上的一个4字 ...

  7. C#学习笔记(基础知识回顾)之值传递和引用传递

    一:要了解值传递和引用传递,先要知道这两种类型含义,可以参考上一篇 C#学习笔记(基础知识回顾)之值类型和引用类型 二:给方法传递参数分为值传递和引用传递. 2.1在变量通过引用传递给方法时,被调用的 ...

  8. C#学习笔记(基础知识回顾)之值类型和引用类型

    一:C#把数据类型分为值类型和引用类型 1.1:从概念上来看,其区别是值类型直接存储值,而引用类型存储对值的引用. 1.2:这两种类型在内存的不同地方,值类型存储在堆栈中,而引用类型存储在托管对上.存 ...

  9. MAVEN学习笔记之基础(1)

    MAVEN学习笔记之基础(1) 0.0 maven文件结构 pom.xml src main java package resource test java package resource targ ...

  10. mybatis学习笔记之基础复习(3)

    mybatis学习笔记之基础复习(3) mybatis是什么? mybatis是一个持久层框架,mybatis是一个不完全的ORM框架.sql语句需要程序员自己编写, 但是mybatis也是有映射(输 ...

随机推荐

  1. HBase安装和启动

    目录 认识HBase 前期准备 1. 解压HBase 2. 修改3个配置文件(配置文件目录:hbase-0.96.2-hadoop2/conf/) 3. 将hadoop的hdfs-site.xml和c ...

  2. 小学生轻松做题App

    作业链接:https://edu.cnblogs.com/campus/fzzcxy/2016SE/homework/2180 原型模型设计工具:墨刀 原型模型链接:https://modao.cc/ ...

  3. Emacs及扩展配置

    Emacs及扩展配置 Table of Contents 1. 动机之反思 2. 它山之石 3. 扩展的管理 4. 我额外安装的通用扩展(在purcell基础上) 5. LaTex相关的问题和配置 6 ...

  4. oracle删除表空间下所有的表

    SELECT 'DROP TABLE ' || TABLE_NAME || ' CASCADE CONSTRAINTS' V_NAME FROM DBA_TABLES WHERE TABLESPACE ...

  5. post传参

    1.form表单 2.数据流

  6. Spring设置定时器配置

    corn表达式生成:http://www.pppet.net/ 1.注解方式 添加命名空间 xmlns:task="http://www.springframework.org/schema ...

  7. 前端福利之overflow-scrol 怎么隐藏滚动条(转)

    最近用vue写wap站的时候遇到了微信打开页面滚动条无法隐藏的问题. 对于隐藏滚动条,我们最常用的方法首先是: 1.使用以下CSS可以隐藏滚动条: .container::-webkit-scroll ...

  8. HDU 1071 The area (数学定积分)

    题意:求阴影部分面积. 析:没什么可说的,就是一个普通的定积分. 代码如下: #include <cstdio> #include <iostream> using names ...

  9. Linux的磁盘分区(二)

    LVM逻辑卷机制 PV(Physical Volume 物理卷) - 物理分区或整个物理磁盘 - 由PE(Physical Extent,基本单元)租场 VG(Volume Group 卷组) - 一 ...

  10. RocketMQ 使用及常见问题

    前言 本文档是针对RocketMQ使用及常见问题的说明. 一.获取项目.安装包及文档 1. alibaba/RocketMQ https://github.com/alibaba/RocketMQ 2 ...