运行结果:

day20.pro

QT       += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsCONFIG += c++11# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0SOURCES += \main.cpp \pushbutton.cpp \widget.cppHEADERS += \pushbutton.h \widget.h# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

pushbutton.h

#ifndef PUSHBUTTON_H
#define PUSHBUTTON_H
#include<QWidget>
class QPushButton;
#include<QPushButton>class PushButton : public QPushButton
{public:PushButton(const QString& text,QWidget* parent=nullptr);bool event(QEvent *e);
};#endif // PUSHBUTTON_H

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include<QMouseEvent>
class Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();virtual bool event(QEvent *event);void mousePressEvent(QMouseEvent *event);
};
#endif // WIDGET_H

main.cpp

#include "widget.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}

pushbutton

#include "pushbutton.h"
#include<QEvent>
#include<QDebug>
PushButton::PushButton(const QString& text,QWidget* parent):QPushButton(text,parent)
{}bool PushButton::event(QEvent *event)
{if(event->type()==QEvent::MouseButtonPress){qDebug()<<"child widget mouse button press"<<endl;return true;}return QWidget::event(event);
}

widget.cpp

#include "widget.h"
#include<QDebug>
#include<QEvent>
#include"pushbutton.h"
Widget::Widget(QWidget *parent): QWidget(parent)
{new PushButton("button",this);
}
bool Widget::event(QEvent *event)
{if(event->type()==QEvent::MouseButtonPress|QEvent::MouseButtonDblClick){qDebug()<<"father widget mouse button press"<<endl;//event->ignore();//忽略这个事件//      event->accept();//我接受了这个事件//      return false;//表示我不处理这个事件//return true;//我已经处理了这个事件,不往父窗口传递/*event->accept()以及return true这个时候才不往父窗口传递*/}return QWidget::event(event);
}void Widget::mousePressEvent(QMouseEvent *event)
{static int i=0;qDebug()<<__FUNCTION__<<i++<<endl;
}Widget::~Widget()
{}

附:概念



QT每日一练day20:事件处理机制相关推荐

  1. QT每日一练day4:ubuntu中使用QT

    (本文主要是为了说明QT的跨平台特性)   一.安装QT sudo apt-get install qt5-default qtcreator cmake 二.打开QT 可以点击图标或命令行方式: 三 ...

  2. QT每日一练day1:第一个程序

    参考博文:Qt常见类.窗口类继承关系树图 QT每日一练(1):第一个程序 最终效果(GIF动图): step1: step2: step3: step4: step5: step6: step7: s ...

  3. QT每日一练day8:信号与槽机制

    一. 创建一个空的项目 添加QT的支持 添加main.cpp 编译报错,Q_OBJECT放在CPP文件中会报这个错误,必需放头文件,这个宏比较特殊,只有放头文件才能展开 添加头文件test.h mai ...

  4. QT每日一练day2:day1优化以及QT内存管理机制

    QT中的继承关系 day1优化   一般我们不直接用QWidget来实例化对象,用它的派生类来生成对象,main函数中一般不写太多代码,都是在派生类的构造函数中进行窗口的初始化.布局.设置.其子窗口设 ...

  5. QT每日一练day3:Qt的编译机制

    一.编译过程 二.qmake文件基本语法 qmake文件的常用变量: QT #指定要用的哪些Qt支持库 SOURCES #源文件 HEADERS #头文件 FORMS #用到的ui文件(ui文件时用Q ...

  6. QT每日一练day24:绘画事件

    一.第一阶段 设置线条粗细 二.第二阶段:设置笔的样式 如:虚线 三.第三阶段:绘制矩形 四.第四阶段:设置颜色 轮廓颜色 笔刷颜色 笔刷样式 五.第五阶段:绘制其他形状图像和文字 六.第六阶段:图像 ...

  7. QT每日一练day29:QT中的多线程探究

    一.未使用多线程,则w0先运行完后,w1才开始运行 运行结果(GIF动图): main.cpp xiaowen_QT_day29.pro QT+=widgets SOURCES += \main.cp ...

  8. QT每日一练day27:绘制不规则窗体

    注:本文本来应该是以一个不规则的图片作为历程的,,忘记了!!!!     一.第一阶段:隐藏窗体框架 运行结果(GIF动图): widget.cpp 二.第二阶段:将窗口设置为透明 运行结果(GIF动 ...

  9. QT每日一练day26:绘制图片

    一.第一阶段 发现上述图片没有显示全!!!!! 二.第二阶段 设置宽高比,平滑转换 运行结果(GIF动图): 发现上述图片在数次缩放后会产生失真!!!!! 三.第三阶段 为了避免图像缩放过程中产生失真 ...

最新文章

  1. 《高效团队开发工具与方法》
  2. FastJson屡爆漏洞,或许你应该试试它?
  3. 3.2 神经网络概述-机器学习笔记-斯坦福吴恩达教授
  4. 如何做一名优秀的博士生--施一公教授
  5. 从英伟达 vs ATI的芯片大战看GPU前世今生
  6. Linux 命令(117)—— gzip 命令
  7. 改变图片局部透明度,实现透明度根据位置不而渐变
  8. C# 读写锁 ReaderWriteLock
  9. Python模拟谷歌浏览器发布文字、图片
  10. 文献格式 ShareLaTeX and Overleaf
  11. 线性代数 (一): 证明实对称矩阵特征向量正交
  12. TensorFlow学习笔记之 PReLU激活函数原理和代码
  13. TCPIP协议详解----TCP/IP基础知识
  14. 域名被抢注了怎么办?
  15. 约束(Constraint)SQL约束有哪几种?【常用的约束】【有例子】【非空约束】【唯一约束】【主键约束】【外键约束】【检查约束】
  16. 源码编译更新nginx到最新版本,并开始nginx支持http2协议模块.
  17. 2022最新SCI影响因子TOP100榜单
  18. 高端游戏计算机外形规格,【戴尔G5游戏笔记本电脑外观展示】接口|尺寸|键盘|触摸板_摘要频道_什么值得买...
  19. 小程序下拉刷新没有三个小圆点的加载动画
  20. nvm安装,nvm的使用,nvm常用命令,nvm安装node报错,nvm切换不了,等系列集合

热门文章

  1. 基于JAVA+Swing+MYSQL的在线订餐管理系统
  2. Magisk —— 安卓新一代的第三方拓展,systemless模式
  3. 为什么Prim算法不适用于带权有向图
  4. Ubuntu16.04下配置laravel
  5. centos6.5 安装python3.5
  6. Comet4J推技术在SSHE三大框架中应用-linux下亲测可用
  7. Fiddler使用教程(收藏)
  8. e.target 和 e.srcElement 的使用问题
  9. OpenShift Redhat的使用和介绍
  10. 通过系统表获取SQL,Access,Oracle数据库的元数据信息