在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

馈电网络设计:通过Smith圆图工具完成微带线到同轴探针的阻抗匹配

Smith圆图通过图形化阻抗变换路径,显著简化微带线到同轴探针的匹配设计。设计需结合理论计算(微带线阻抗公式、探针等效模型)、圆图操作(串联/并联元件移动规则)及仿真验证,最终实现宽带低反射匹配。

百态·数智思维 | 聚焦大数据、量化与未来AI 1106

STM32与K210串口通信

这篇文章是为了填上一篇埋下的坑,k210和STM32通过串口通信,我是采用数据包的形式发送数据的,因为K210发送的数据有几种,采用数据包的形式发送比较安全。本文代码运行的平台是STM32F103C8T6和K210 Dock,只涉及到K210发送数据给STM32,stm32将接受到的数据显示到0.96寸OLED屏上。

qq_70715693的博客 3万+

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

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

hahahahaahaha_h的博客 1663

SiC MOSFET驱动设计实战:从特性解析到电路优化

本文深入解析SiC MOSFET的核心特性及其驱动电路设计要点,涵盖高温稳定性、快速开关能力等关键特性,并提供驱动电压配置、电流能力计算、布局优化等实用方案。特别针对第三代电力电子半导体SiC MOSFET的驱动要求,分享STGAP1AS等典型驱动方案的应用技巧,助力工程师解决高频应用中的EMI和热管理挑战。

weixin_29230865的博客 366

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

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

weixin_33881041的博客 148

使用fairseq从头开始训练一个中英神经机器翻译模型

前言 由于毕设是做神经机器翻译相关,所以先尝试一下神经机器翻译的整个流程是非常有必要的。故将在news-commentary-v15语料上训练有监督中英NMT模型的整个流程,包括工具和数据的准备、数据的预处理、训练及解码等过程,以及过程中遇到的问题和解决方案记录在此,以供后期回顾,也希望能够给予别人一些帮助。附本人博客 1 相关工具及目录结构 1.1 相关工具 除jieba是使用pip install安装外,其他几个工具都是建议直接克隆库到自己的用户目录中,方便使用其脚本(moses/subword-nmt

qq_42734797的博客 2万+

TI CC2642R蓝牙5.2模块实战:从零搭建智能门锁原型(附电路图)

本文详细介绍了如何基于TI CC2642R蓝牙5.2模块从零搭建智能门锁原型,涵盖硬件选型、低功耗配置、蓝牙安全交互等关键环节。通过CC2642R的高性能MCU和蓝牙5.2技术,开发者可实现低功耗、高安全性的智能门锁设计,并提供实用的电路图和PCB布局建议。

o5p6q的博客 110

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

【大模型】AI 辅助编程操作实战使用详解

AI 编程实战使用详解

congge 8461

Qt动态监测USB插拔事件

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

梦之旅的专栏 948

Coze 打通飞书多维表格,实现数据增删改查操作实战详解

基于Coze 打通飞书多维表实现数据录入系统实战详解

congge 5780

Winform从入门到精通(1)——Label(史上最全)

本篇文章是对专栏《winform控件从入门到精通》的详细介绍

qq_34059233的博客 4万+

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的博客 1024

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

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

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

gitblog_06595的博客 560

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、付费专栏及课程。

余额充值