在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