在QT4中处理windows消息

Qt和Windows消息通信机制 Qt和Windows消息通信机制 Qt Qt是以事件驱动的UI工具集。 大家熟知Signals/Slots在多线程的实现也依赖于Qt的事件处理机制。 在Qt中,事件被封装成一个个对象,所有的事件均继承自抽象类QEvent. 接下来依次谈谈Qt中有谁来产生、分发、接受和处理事件: 1、谁来产生事件: 最容易想到的是我们的输入设备,比如键盘、鼠标产生的 keyPressEvent,keyReleaseEvent,mousePressEvent,mouseReleaseEvent事件(他们被封装成QM. 阅读详情

QT4,IDE为QTCreator


为了能处理某些qt无法处理的事件,或者在Qt将消息封装之前能做某些操作等等,我们可以自己处理windows事件。

处理windows事件是重写QApplication::winEventFilter(MSG*,long)函数来实现的。假如我们想捕获所有在窗体上的鼠标中键按下的消息,我们可以继承一下QApplication类:

class MyApplication:public QApplication
{
    Q_OBJECT

public:
    MyApplication(int argc,char *argv[]);
    ~MyApplication(){}
protected:
    bool winEventFilter(MSG *message, long *result);
signals:
    void MBD();
};


在上面的子类MyApplication中,我们重写了winEventFilter函数,并且自定义了一个信号。

然后我们将此函数补充完全:

MyApplication::MyApplication(int argc, char *argv[]):QApplication(argc,argv)
{
}
bool MyApplication::winEventFilter(MSG *message, long *result)
{
    switch(message->message)
    {
    case WM_MBUTTONDOWN:
        qDebug()<<"OK";
        emit MBD();
    default:
        break;
    }
    return QApplication::winEventFilter(message,result);
}


在这个函数中,我们将windows消息中的WM_MBUTTONDOWN消息自定义的处理了,为了不影响默认处理,我们在最后一句中将消息和消息附加信息交给了基类的函数来处理。当你想过滤某种信息时候,可以在case语句中直接返回true,当返回false时候也会进行qt默认的处理。

然后我们就可以将信号与槽连接起来了:

connect(QApplication::instance(),SIGNAL(MBD()),this,SLOT(sayMidBtm()));


QApplication::instance()会返回一个QApplication的实例的指针,用此来与你想要运行的槽函数相连。

效果如下:

 

这样就处理完windows消息了。

QT源码解析(一) QT创建窗口程序、消息循环和WinMain函数 版权声明请尊重原创作品。转载请保持文章完整性,并以超链接形式注明原始作者“tingsking18”和主站点地址,方便其他朋友提问和指正。 QT源码解析(一) QT创建窗口程序、消息循环和WinMain函数QT源码解析(二)深入剖析QT元对象系统和信号槽机制QT源码解析(三)深入剖析QT元对象系统和信号槽机制(续)QT源码解析(四)剖析Qt的事件机制原理QT源码解析(五) 阅读详情

相关推荐

qt 获取windows 的消息(qt get message from win32 API )

<br />qt 给win32 发送消息很简单,但是要获取windows 消息却十分复杂,最后想了一个不是很完美 但是也是以现在本人能力所能实现的唯一途径了,基本原理是 利用vc编写一个mfc 的dll ,这个dll 中创建一个透明窗体,利用这个dll 获取win32 API 消息。<br /> <br /> <br />源码 已经在vs2010 vs6.0 qt 4.7 下试验通过<br /> <br />下面贴出 重要的实现源码: <br /> VC dll- ReceiveMessage.cpp<br

hufeng825的专栏 5785

QT中处理不同Windows(窗体中的)消息

为了能处理某些qt无法处理的事件,可以自己处理windows事件。 处理windows事件是重写QApplication::winEventFilter(MSG*,long)函数来实现的。假如功能想捕获所有在窗体上的鼠标中键按下的消息,需要继承QApplication类: class MyApplication:public QApplication { Q_OBJECT public: MyApplication(int argc,char .

u011555996的博客 645

qt调用vlc响应windows消息

调用vlc的时候,vlc将会托管所有鼠标消息,键盘消息(因为vlc内置一个dvd menu功能,将会使用到这些消息),然而我们便不能定制自己的行为了,比如本人需要获取鼠标点击的坐标。 查询资料发现有5种解决方案。如下 1.全局hook,都说能成功。没有尝试过。 2.在事件到达vlc部件之前拦截鼠标消息,按照windows消息传递机制,外部消息是由父到子(顶层窗口,子窗口,部件......),

dwjmantou的专栏 1942

Qt捕获Windows消息

继承Qt的基类QAbstractNativeEventFilter class HHNativeEventFilter : public QAbstractNativeEventFilter { protected: bool nativeEventFilter(const QByteArray &eventType, void *message, long *) { ...

不知方向的行走 1289

基于Qt5.4的仿QQ聊天室项目实战|跨平台即时通讯系统开发

简介:本项目以Qt5.4框架为基础,打造一个功能完整的仿QQ聊天室应用,涵盖登录、注册、私聊、群聊等核心即时通讯功能,支持在Ubuntu 12和Windows平台运行,实现跨平台桌面客户端与Linux服务器协同工作。项目深入实践网络编程、用户认证、多线程处理、消息分发机制及图形界面设计,采用QTcpServer/QTcpSocket进行TCP通信,结合SQLite或MySQL存储用户数据并实现密码加密,利用Qt事件驱动模型和数据序列化技术完成高效稳定的消息传输。

weixin_34779181的博客 511

qt在windows环境下截取消息

qt在windows环境下截取消息(注:系统已使用消息尽量不要去处理)

Qt处理windows系统消息实现全局热键

QT5中处理windows系统消息QAbstractNativeEventFilter NativeEventFilter,本地事件过滤器,在Qt中,当需要对系统消息或者自定义消息进行处理时会用到。相关的有QAbstractNativeEventFilter类和两个函数(installNativeEventFilter、removeNativeEventFilter) 一QAbstractNativeEventFilter virtual bool nativeEventFilter(const .

南宫封清的博客 1223

QT EventFilter事件过滤器样例(无bug)

安装鼠标点击事件、键盘输入事件的过滤器,输出相关信息到状态栏

qt 处理自定义的windows消息

#include "mainwindow.h" #include "ui_mainwindow.h" #include #include bool MainWindow::nativeEvent(const QByteArray &eventType, void *message, long *result) { if (eventType == "windows_ge

swartz_lubel的专栏 2258

SpringBoot整合海康SDK实战:从设备初始化到PS流录像转MP4全流程(附避坑指南)

本文详细介绍了SpringBoot整合海康SDK的完整实战流程,涵盖设备初始化、通道管理、录像检索与下载。针对海康设备生成的PS流录像文件无法直接播放的痛点,重点解析了如何利用FFmpeg高效、无损地将其转换为通用的MP4格式,并提供了关键的避坑指南和性能优化建议。

chair的专栏 764

SAP采购含税价转换的底层逻辑解析:ABAP例程如何实现价税分离计算

本文深入解析SAP系统中采购含税价与不含税价的转换机制,重点介绍VOFM例程和ABAP代码实现价税分离计算的方法。通过详细讲解数学原理、税率体系及SAP定价引擎架构,为开发人员提供完整的解决方案,帮助提升采购业务中的价格处理效率和准确性。

weixin_29237635的博客 450

Qt利用eventFilter函数屏蔽子控件自带键盘响应,只允许自定义键盘响应

最近写项目遇到一个问题,添加了一个QGraphicsView控件,自定义键盘事件使Item可以上下左右移动,但实际由于QGraphicsView自带上下左右的键盘事件响应,导致自己写的事件被劫持,压根传不到窗口。 解决办法想到的是:安装事件过滤器,将QGraphicsView自带的上下左右键盘事件屏蔽掉,但是这样做的结果就是连自定义的键盘事件都给屏蔽了,后来突发奇想:直接将键盘按压事件写在过滤器里面不就好了,试了一下,果真有用,话不多说直接上代码:...

hahahahaahaha_h的博客 1663

linux 4.19在龙芯平台上编译出错解决方法

OS: Loongnix server 1.7 工具链为:系统自带的gcc-4.8.5 和 gcc-7.3 平台:3A3000/3A4000 源码:kernel: 4.19 编译步骤 ··· make loongson3_defconfig make -j4 ··· 出错信息: HOSTCC arch/mips/boot/compressed/calc_vmlinuz_load_addr arch/mips/boot/compressed/head.S: Assembler messages: arch/m

sense的专栏 1124

Qt4中的一个关于消息处理的BUG

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33881041的博客 148

领域驱动新实践:COLA框架全解析——架构设计与实战案例解析

定义订单支付事件java代码解读复制代码} }Order定义Order类,继承并实现支付逻辑:java代码解读复制代码} }定义接口:java代码解读复制代码定义类,处理订单支付逻辑并持久化:java代码解读复制代码} }定义和处理订单支付事件:java代码解读复制代码} }java代码解读复制代码} }定义和接口及其实现:java代码解读复制代码java代码解读复制代码。

2401_89221445的博客 2662

【PyTorch项目实战】之ResNet系列:resnet18、resnet34、resnet50、resnet101、resnet152

ResNet (Residual Network) :是一种深度卷积神经网络(CNN)架构,其核心思想是引入残差学习(Residual Learning)机制,通过跳跃连接(skip connections)来解决深层网络训练中的退化问题。

📷 图像处理践行者 | 传统算法 · 深度学习 · 多模态 | 分享实战经验与技术洞见,探索从像素到智能的无限可能。 6374

Qt-捕获Windows消息

Qt4版本的实现 方法1: 通过继承QWidget的类中重新实现winEvent接口,以接收在消息参数中传递的本机Windows事件。 bool QWidget::winEvent(MSG *message, long *result) 1 方法2: 通过继承QCoreApplication的类中重新实现winEventFilter接口,以接收在消息参数中传递的本机Windows事件。 bool QCoreApplication::winEventFilter(MSG *msg, long *result)

u011555996的博客 2468

Python 安装 PyTorch(GPU)详细教程

本章教程,介绍如何安装PyTorch GPU版本的具体教程。

猿小白的博客 1623

Qt动态监测USB插拔事件

【代码】Qt动态监测USB插拔事件。

梦之旅的专栏 948

VTK API 详解(115):vtkScalarBarActor - 显示颜色条

显示用于颜色映射的标量值范围。自动从vtkMapper中提取。可设置颜色条的位置、大小、字体、标签格式等。支持横向或纵向显示颜色条。是进行科学数据伪彩色可视化时非常重要的辅助工具,它能让用户直观地理解不同颜色代表的数值大小。通过灵活设置颜色表、标题、标签数量等,可以适配多种可视化需求。

yumeiguo的博客 488

【系统架构设计师】预测试卷十:综合知识(75道选择题)

本文包含75道选择题,覆盖计算机系统、操作系统、网络、数据库、软件工程等核心知识域,其中系统架构设计与评估占比最高(19题)。题目难度稍高,注重灵活应用,题干全新且不与前8套重复。部分典型题目解析包括:计算机性能比较(CPU时间公式TLB/页表机制)、Cache写策略、流水线分支惩罚、管程条件变量、LRU近似算法、自旋锁适用场景、TCP字节流特性、Anycast应用、MVCC机制、分布式事务选型等。答案详解强调易错点,如性能比较需综合计算、TLB缺失不等于缺页、

数据知道的博客 478

Qt4下创建自定义窗体

Qt4下创建自定义窗体 Qt下想创建一个可以自定义标题栏的窗体,一般大家都会使用FramelessWindowHint枚举通过QWidget的setWindowFlags方法来把窗体的边框和标题栏去掉,虽然这么做可以实现一个大家想要打窗体,但是它带来的负作用是失去了很多原生窗体的一些自定义的一些事件响应(比如win+方向键无法响应,无法自动布局很不爽)。还好鄙人是写C#出生,在winform下有

clfkg1412的博客 1607

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

qt5 nativeEvent 无法接收windows消息的问题

qt5取消了winEvent改为nativeEvent,但是这里有个坑,就是nativeEvent在qwidget.h中的定义有一个宏判断版本,qt6和qt5的定义是不一样的。之前用qt4接收windows消息的时候,重写winEvent函数即可。如果在qt5上使用了qt6的定义,那是接收不到消息的。

weixin_41753250的博客 1022

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

【亲测免费】 QT项目八:五子棋网络版(可公网对战,支持多玩家多房间)

QT项目八:五子棋网络版(可公网对战,支持多玩家多房间) 去发现同类优质开源项目:https://gitcode.com/ 项目简介 本项目是一个基于QT框架开发的五子棋网络版游戏,支持公网对战,并能够支持多玩家在多个房间内进行游戏。玩家可以通过网络连接到服务器,进入不同的房间进行1V1对战。游戏还提供了房间管理功能,玩家可以创建房间并邀请其他玩家加入。 功能特点 公网对战:玩家可以通过互联网连...

gitblog_06595的博客 560

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

QT代码crashed崩溃(win)——创建 Dump 调试文件

环境:Qt4/C++和Windows以及vs调试环境 1、头文件 #ifndef MINIDUMP_H #define MINIDUMP_H #include <Windows.h> #include <DbgHelp.h> // based on dbghelp.h typedef BOOL (WINAPI *MINIDUMPWRITEDUMP)(HANDLE hProcess, DWORD dwPid, HANDLE hFile, MINIDUMP_TYPE DumpTyp

qq_37860271的博客 990

MFC消息机制 & Qt消息机制 解析

MFC消息机制 VS Qt消息机制

zhangchuan7758的博客 3109
上一篇: QT 模仿QQ的截图框 支持基本的拖拉 移动 固定大小 可以复制到剪贴板和保存到文件中
下一篇: [学习小结]数组名与数组首元素地址解析
碎炎
博客等级 码龄16年 85粉丝 61原创
评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值