1. 程式人生 > >在QT4中處理windows訊息

在QT4中處理windows訊息

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訊息了。

相關推薦

QT4處理windows訊息

QT4,IDE為QTCreator 為了能處理某些qt無法處理的事件,或者在Qt將訊息封裝之前能做某些操作等等,我們可以自己處理windows事件。 處理windows事件是重寫QApplication::winEventFilter(MSG*,long)函式來實現的。假

C#呼叫Windows訊息處理

引入User32.dll中的方法進行處理: public class Win32ApiMessage { [StructLayout(LayoutKind.Sequential)] public struct MSG {

kafka處理超大訊息的一些考慮

    時間:2015-02-01 00:38:26      閱讀:5854      評論:0      收藏:0&n

vim處理windows下的文件換行符

在Linux環境下使用vim處理windows環境下的文件時會有換行符不相容的問題。 windows下換行符為:“\r\n” Linux下換行符為:“\n” 在vim中我們使用:set filefor

MFC 如何在自己的程式獲取Windows桌面底部工作列 自動隱藏工作列\取消自動隱藏工作列 的訊息

    由於需求,我需要獲取Windows底部工作列 自動隱藏工作列或者取消自動隱藏工作列時的訊息。 可在當時我就在想想要在自己程式中獲取系統的訊息那肯定很麻煩,於是我就上網查了一遍不過這方面的介紹也似乎不是很多。不過也有類似的比如用全域性鉤子、用API攔截技術等,但也只是

從零開始開發3D遊戲引擎 - 在QtWidget進行Direct3D11渲染,並捕捉Windows訊息

DirectX 渲染 建立一個繼承QWidget的類,重寫paintEvent,resizeEvent 但是僅僅這樣還不夠,畫面會一直閃爍,需要重寫以下函式 virtual QPaintEngine paintEngine() const { return NULL; }* 並設定視窗屬

python處理Windows平臺上路徑有空格 python那糾結的os.system()與空格處理

  最近在採集windows上中介軟體的時候,遇到了檔案路徑有空格的問題。   例如:Aapche的安裝路徑為D:\Program Files\Apache Software Foundation\Apache2.2。   採集apache要讀取配置檔案D:\Program Files\Apache So

Android的非同步訊息處理機制

這也是Android中老生常談的一個話題了,它本身並不是很複雜,可是面試官比較喜歡問。本文就從原始碼再簡單的理一下這個機制。也可以說是理一下Handler、Looper、MessageQueue之間的關係。 單執行緒中的訊息處理機制的實現 首先我們以Looper.java原始碼中給出的一個例子來

MFC——12.話框對鍵盤訊息的響應處理&&如何響應wm_char訊息

This member function is called by the framework to allow your application to handle a Windows message. The parameters passed to your function reflect the p

VC程式設計Windows訊息處理機制、阻塞試驗、SetTimer、MessageBox、小心訊息響應處理函式

VC6標準WIN32程式,Windows訊息處理機制: 1.在註冊視窗類時,指定了訊息處理函式WndProc()。 2.WinMain()裡有訊息迴圈:     while (GetMessage(&msg, NULL, 0, 0))     {    

windows訊息機制lparam與wparam兩個引數的分析

一. WPARAM 和 LPARAM 本質上沒有什麼區別:都是32位數, 但是區別也還是有的:MICROSOFT在使用時兩種引數分別代表不同的含義和內容,WPARAM常常代表一些控制元件的ID或者高位低位組合起來分別表示滑鼠的位置,如果訊息的傳送者需要將某種結構的指標或者是

網路程式設計(53)—— Windows下使用WSAAsyncSelect實現視窗處理socket訊息

一、引言        上一文中我們介紹了使用WSAEventSelect實現非同步通知IO的方法,本文我們主要討論下使用WSAAsyncSelect處理socket的方法。本文的主要目標,是建立一個帶介面的回聲服務端,接收並返回客戶端傳過來的字串,並在介面上顯示該字串。為

最新歷史版本 :wince Windows訊息的十六進位制表述

windows mobile程式設計,無論使用eVC還是.net CF,都脫不開windows訊息機制這個框架。在日常的程式編寫過程中,windows訊息也是很常用的,windows訊息常用的api函式也是常用。         這裡我們不介紹windows api函式,而是

VC2008處理CStatic控制元件的單擊STN_CLICKED訊息

     在MFC中,靜態文字CStatic控制元件主要是用來作為標籤,即作為註釋用的。一般情況下不做訊息響應。但是有時特殊情況下會做一些訊息響應,比如處理單擊事件STN_CLICKED等。      在VC2008下使用MFC建立了一個基於對話方塊的應用程式。新增一個CS

在MFC手動新增訊息處理函式PreTranslateMessage

1、是否呼叫TranslateMessage()和DispatchMessage()是由一個名稱為PreTranslateMessage()函式的返回值決定的,如果該函式返回TRUE,則不會把該訊息分發給視窗函式處理。

使用者定時器SetTimer及Windows訊息的傳遞處理

#include <windows.h> #include <stdio.h> #include <conio.h> int coun

WINDOWS訊息處理過程

一、引言二、Windows訊息機制的概念 1、DOS與Windows驅動機制的區別 2、訊息 3、訊息的來源 4、Windows的訊息系統的組成 5、訊息的響應三、Windows訊息機制要點 1. 視窗過程 2 訊息型別 3訊息佇列(Message Queues) 4 佇列訊息和非佇列訊息 5 Windows

Java處理二進制移位

置0 返回 進制 com 移位 移除 bsp int 說服力 我相信,這篇文章讀起來會相當有趣。 文章中編程語言是Java,用Java的原因:第一,Java不做數據溢出校驗,這樣我們可以忽略溢出異常;第二,Java普及率比較高,就像是python或shell,幾乎人人都會吶

Android處理大圖片時圖片壓縮

oca 內存空間 pan std ret bitmap sans source tar 1、BitmapFactory.Options中的屬性 在進行圖片壓縮時,是通過設置BitmapFactory.Options的一些值來改變圖片的屬性的,以下我們來看看BitmapF

nodejs處理回調函數的異常

out dom tac rip ack javascrip java logger exception 假設是使用nodejs+express3這個經典的組合。那麽有一種非常方面的處理回調函數異常的方法: 1. 安裝模塊:express-domain-middlew