1. 程式人生 > >Qt事件處理的使用方法

Qt事件處理的使用方法

總結一下今天工作中學到的要點:今天在工作中,主要遇到了一個事件相關的問題,就是我在編寫一個Qt控制元件的時候,想要為這個控制元件增加一個事件處理!這裡用到了Qt的事件處理模組。一般常用的按鈕QPushButton控制元件本身就有單擊事件,因此只要單擊就會觸發clicked訊號,但是如果我想要給QLabel這種控制元件增加一個單擊事件怎麼辦呢,這時就可以繼承一下QLabel,然後為其內部實現mousePressEvent即可:

class new_qlabel : public QLabel
{
    Q_OBJECT
public:
    explicit new_qlabel(QWidget *parent = 0
):QLabel(parent){} protected: void mousePressEvent(QMouseEvent *e) { if(e->button() == Qt::MidButton) { qDebug()<<"點選了滑鼠中鍵"; emit on_midbutton_clicked(); } QLabel::mousePressEvent(e); } signals: on_midbutton_clicked(); };

為了簡單,我實現檔案和標頭檔案寫在了一起,實際程式設計時記著分開,這裡要注意兩點,一個是記著加Q_OBJECT巨集,一個是處理完事件後執行父類的對應函式QLabel::mousePressEvent(e);從而將事件傳遞給父類,因為有些事件可能父類還要處理。

最後總結一下Qt事件處理提供的5個級別的事件處理和過濾:
1. 重新實現事件函式。 比如: mousePressEvent(), keyPress-Event(), paintEvent() 。 這是最常規的事件處理方法。
2. 重新實現QObject::event(). 這一般用在Qt沒有提供該事件的處理函式時。也就是,我們增加新的事件時。這種方式常用於覆蓋Tab鍵的預設意義。這種方式也可以用於處理那些沒有特定事件處理器的不常見型別的事件中(如:QEvent::HoverEnter)。注意:重實現這個虛擬函式時記著結尾呼叫基類的event()函式,防止沒有處理的事件止於此函式。
3. 安裝事件過濾器:物件使用installEventFilter()註冊後,用於目標物件的所有事件都會首先發送給這個監視物件的eventFilter()函式。如果同一物件上安裝多個事件處理器,那麼按照安裝順序的逆序,即最近安裝的到最先安裝的,依次啟用這些事件處理器。


4. 在 QApplication 上安裝事件過濾器。 這之所以被單獨列出來是因為: QApplication 上的事件過濾器將捕獲應用程式的所有事件,而且第一個獲得該事件。也就是說事件在傳送給其它任何一個eventFilter()函式之前傳送給QApplication的eventFilter()函式。這種處理方式對於除錯非常有用,也可用來處理那些傳送給失效視窗部件的滑鼠事件,因為QApplication通常會忽略這些事件。
5. 重新實現QApplication 的 notify()方法. Qt使用 notify()來分發事件。要想在任何事件處理器捕獲事件之前捕獲事件,唯一的方法就是重新實現QApplication 的 notify()方法。

相關推薦

Qt事件處理的使用方法

總結一下今天工作中學到的要點:今天在工作中,主要遇到了一個事件相關的問題,就是我在編寫一個Qt控制元件的時候,想要為這個控制元件增加一個事件處理!這裡用到了Qt的事件處理模組。一般常用的按鈕QPushButton控制元件本身就有單擊事件,因此只要單擊就會觸發cl

初步剖析QT事件處理全過程(Windows)

職責 spa message alt cati 窗口 初步 負責 啟動 一、說起Qt事件處理,在windows平臺下,當然離不開Win32: Win32程序的基本結構:  1.註冊窗口;  2.創建窗口;  3.啟動由GetMessage和DispatchMessage構成

Qt ------ 事件處理機制

後處理 分發 異步 ant ont 事件循環 tar rpo 基類 簡介 在Qt中,事件被封裝成一個個對象,所有的事件均繼承自抽象類QEvent。Qt是以事件驅動UI工具集。Signals/Slots在多線程中的實現也是依賴於Qt的事件處理機制。在Qt中,事件被封裝成一個個

Cocos Creator開發中的按鈕節點的事件處理方法

管理 效果 開發 屬性列表 function 點擊事件 名稱 src 編程 Cocos Creator開發中的按鈕節點的事件處理方法 Cocos Creator基於Cocos2d-x(C++方案),提出全新的編程理念。Cocos Creator是以內容創作為核心的遊戲開發工

移動端APP列表點透事件處理方法

lun 彈窗 效果 tee 兩張 mark turn 方案 nod 關於點透事件這裏不再贅述,如果不清楚的可以上網搜一搜,或者看小火柴的這篇文章。 這裏是自己在做移動端時,在列表滑動的時候,遇到的點透問題。出現這個問題的來由是因為在轉場的時候,各個手機的轉場效果不一樣,有的

17.QT-事件處理分析、事件過濾器、拖放事件

期待 使用 lis 相關 事件處理 [] 支持 實現 endif Qt事件處理介紹 Qt平臺會將系統產生的消息轉換為Qt事件 Qt事件是一個QEvent的對象 Qt事件用來描述程序內部或外部發生的動作 任意的QObject對象都具備事件處理的能力 Qt常見

QT開發——QT事件處理機制

ref:https://blog.csdn.net/A642960662/article/details/66473871 一、QT事件簡介     QT程式是事件驅動的, 程式的每個動作都是由內部某個事件所觸發。QT事件的發生和處理成為程式執行的主線

Qt事件處理機制整個流程--以滑鼠在一個視窗中點選為例

轉載自:http://mobile.51cto.com/symbian-272812.htm,在此謝謝原作者的分享! ------------------------第一部分----------------------   本篇來介紹Qt 事件處理機制 。深入瞭解事件處理系統對

Qt事件處理

Qt事件處理 Qt事件處理的五個層次 Qt 應用程式 事件處理 的五個層次,同時也是時間流程如下圖所示: 說明如下: sendEvent()會把event直接傳送給QCoreApplication的notify(),postEvent()把event追加到事件佇列中最終也要呼叫notify(

MATLAB-VISSIM模擬過程的呼叫和事件處理方法

%%建立VISSIM的COM介面 vissim =actxserver('VISSIM.vissim.430'); %% 載入交通網路 current_path = pwd; vissim.LoadNe

【原】ios的hitTest方法以及不規則區域內觸控事件處理方法

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { UIView *hitView = nil; //NSLog(@"point:%@", NSStringFromCGPoint(point));

QT事件處理(以按鈕為例子)

<iframe id="cproIframe_u1788635_2" width="336" height="280" src="http://pos.baidu.com/acom?adn=3&amp;at=231&amp;aurl=&amp;cad=1&amp;cc

EventBus原始碼分析(三):post方法釋出事件【獲取事件的所有訂閱者,反射呼叫訂閱者事件處理方法】(2.4版本)

EventBus維護了一個重要的HashMap,這個HashMap的鍵是事件,值是該事件的訂閱者列表,因此post事件的時候就能夠從此HashMap中取出事件的訂閱者列表,對每個訂閱者反射呼叫事件處理方法。 private final Map<Cla

qt事件處理流程

前面的章節中我們曾經提到event()函式。事件物件建立完畢後,Qt 將這個事件物件傳遞給QObject的event()函式。event()函式並不直接處理事件,而是將這些事件物件按照它們不同的型別,分發給不同的事件處理器(event handler)。 如

python3+PyQt5 重新實現QT事件處理程式

本文是對《Python Qt GUI快速程式設計》的第10章的例子events用Python3+PyQt5進行改寫,涉及到重新實現QWidget的事件處理程式。本例子涉及到上下文選單,滑鼠事件,鍵盤事件,可作為重新實現事件處理程式的參考。 注:在建立上下文選單

Android事件處理方法總結-Handler訊息處理

一、Android中的事件處理方法 事件處理:響應使用者UI動作,提高應用程式互動性 1、基於監聽的事件處理機制 2、基於回撥的事件處理機制 3、Handler訊息處理 二、Handler訊息傳遞機制詳解 1、為什麼要使用Handler訊息傳遞     1).Andr

Qt事件處理(五)——定時器

目錄 前言 因為需要在開發板上無法直接使用OpenCV的攝像頭獲取事件來獲取視訊幀進行處理,而前面已經移植好了v4l2驅動攝像頭,這時候需要對影象進行進一步的處理,需要用到定時器來獲取視訊

繫結資料來源時組合框ComboBox.DrawItem的事件處理方法

在一些窗體應用程式中,常常需要重寫組合框控制元件ComboBox的DrawItem事件處理方法,例如:顏色選擇組合框、帶圖示的組合框、調整項間距的組合框,等等。基本步驟如下: 設定ComboBox.DrawMode為OwnerDrawFixed或OwnerDrawVa

UIALertView的基本用法與UIAlertViewDelegate對對話方塊的事件處理方法

首先,檢視控制器必須得實現協議UIAlertViewDelegate中的方法,並指定delegate為self,才能使彈出的Alert視窗響應點選事件。 具體程式碼如下: ViewController.h中的程式碼如下: #import <UIKit/UIKit.h

JS綁定事件和移除事件處理方法

nbsp 觸發 ner 它的 msu eve code ont 一個 addEventListener()與removeEventListener()用於處理指定和刪除事件處理程序操作。全部的DOM節點中都包括這兩種方法,而且它們都接受3個參數:要處理的事件名、作為事件