#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. 迷你MVVM框架 avalonjs 0.93发布

    这段时间吸取@limodou, @东灵等人的意见,做了以下改进 重构isArrayLike,提高avalon.each的性能,原来avalon.each是依赖于isArrayLike来判定是循环普通对 ...

  2. Win7删除远程连接历史记录

    打开注册表,找到 HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Default 删除右侧的 MRUn(n是索引号) 项 即可.

  3. c# class struct区别

    一句话,前者引用类型,后者值类型,适合高性能的情况,但不可存储大数据.

  4. 非root用户使用1024以下端口

      如果你有一个最新的内核,确实有可能使用它作为非root用户启动服务,但绑定低端口.最简单有效的办法是: #setcap 'cap_net_bind_service=+ep' /path/to/pr ...

  5. java把流抛给浏览器下载时,当下载的文件文件名为中文时,出现中文名被替换为“----------”的情况

    比如说,下载的文件名为: 软件分析报告.docx,当使用流抛给浏览器下载时,浏览器下载的文件为:-----------.docx 出现这种情况的原因:大体的原因就是header中只支持ASCII,所以 ...

  6. errorlevel 续1

    -------siwuxie095             常用 errorlevel 返回值:     backup 0 备份成功 1 未找到备份文件 2 文件共享冲突阻止备份完成 3 用户用 ct ...

  7. jQuery的event事件

    1.冒泡和默认行为 <div class="aa"> <div class="bb"> <div class="cc&q ...

  8. 9-eclispe中右键BuildPath没有了

    Eclipse 右上角的代码视图,选择Java就好了!

  9. [Selenium]点击下拉框之后,从下拉列表选择元素进行点击很容易失败

    点击下拉框之后,下拉列表会显示出来,但是有时候下拉列表会很快就消失掉,导致后面选择元素的时候会失败. 像这种情况,需要将鼠标移动到下拉列表上,使下拉列表维持显示,然后才选择元素进行点击. 将鼠标移动到 ...

  10. iOS's GCD Note

    [iOS's GCD Note] 1.默认有四种全局concureent queue,如下: 通过以下函数来引用: 2.官方文档上并发队列有3种,实际上main就是serial. 1)serial,用 ...