QT(5) 多事件響應 示例原始碼

2022-06-28 09:15:12 字數 3015 閱讀 3339

本文講的是qt中的事件及其響應。首先訊號和事件是兩個層面的東西,我簡單的理解為人機介面互動中,輸入裝置如滑鼠、鍵盤的操作,還有定時器產生的動作。這個解釋並不準確,但先這麼解釋吧。

應用上:乙個mainwindow裡有好幾個控制項,我按下鍵盤後,要a控制項響應,b控制項不響應 如何實現呢?

首先:要知道事件是先到mainwindow還是先到控制項的;//順序:先mainwindow 後控制項

其次:a、b控制項接收的順序是由什麼決定的;//順序:控制項建立的順序

最後:如何控制控制項忽略事件。            //mainwindow、b中分別建立事件過濾函式 呼叫順序

呼叫順序:事件產生->焦點視窗->父視窗

具體步驟:

1.建立mainwindow和2個響應事件的控制項類。

響應事件的控制項類mylineedit;

響應事件並含過濾器功能的mylineeditfilter。

mylineeditq建立乙個含qkeyevent *event 引數的函式。

void mylineedit::keypressevent(qkeyevent *event) // 鍵盤按下事件

mylineeditfilter除了建立含qkeyevent *event 引數的函式外還要建立乙個含返回為bool ,含qevent *event型別的函式。

bool event(qevent *event)

2. mainwindow中呼叫控制項

2.1建立控制項   

mylineedit  plineedit = new mylineedit(this);

mylineeditfilter plineeditfilter=new mylineeditfilter(this);

過濾器類呼叫需要多乙個函式

plineeditfilter->installeventfilter(this);

2.2 mainwindow 新增事件過濾函式

bool mainwindow ::eventfilter(qobject *obj, qevent *event) //

return qwidget::eventfilter(obj, eve

}**例項

mainwindow.cpp
#include "mainwindow.h"

#include "ui_mainwindow.h"

#include "mylineedit.h"

#include "mylineeditfilter.h"

#include #include mainwindow::mainwindow(qwidget *parent)

: qmainwindow(parent)

, ui(new ui::mainwindow)

mainwindow::~mainwindow()

void mainwindow::keypressevent(qkeyevent *event)

bool mainwindow::eventfilter(qobject *obj, qevent *event) // 事件過濾器

return qwidget::eventfilter(obj, event);

}

mainwindow.h

#ifndef mainwindow_h

#define mainwindow_h

#include //引入標頭檔案的方式兩種 namespace 和include

qt_begin_namespace

namespace ui

class mylineedit;

class mylineeditfilter;

qt_end_namespace

class mainwindow : public qmainwindow

;#endif // mainwindow_h

mylineedit.h

#ifndef mylineedit_h

#define mylineedit_h

#include class mylineedit : public qlineedit

;#endif // mylineedit_h

mylineedit.cpp

#include "mylineedit.h"

#include #include mylineedit::mylineedit(qwidget *parent):

qlineedit(parent)

void mylineedit::keypressevent(qkeyevent *event) // 鍵盤按下事件

mylineeditfilter.h
#ifndef mylineeditfilter_h

#define mylineeditfilter_h

#include class mylineeditfilter : public qlineedit

;#endif // mylineeditfilter_h

mylineeditfilter.cpp

#include "mylineeditfilter.h"

#include #include mylineeditfilter::mylineeditfilter(qwidget *parent):

qlineedit(parent)

void mylineeditfilter::keypressevent(qkeyevent *event) // 鍵盤按下事件

bool mylineeditfilter::event(qevent *event) // 事件

QT(5) 多事件響應 示例原始碼

本文講的是qt中的事件及其響應。首先訊號和事件是兩個層面的東西,我簡單的理解為人機介面互動中,輸入裝置如滑鼠 鍵盤的操作,還有定時器產生的動作。這個解釋並不準確,但先這麼解釋吧。應用上 乙個mainwindow裡有好幾個控制項,我按下鍵盤後,要a控制項響應,b控制項不響應 如何實現呢?首先 要知道事...

QT(5) 多事件響應 事件過濾器 示例原始碼

事件過濾器可以很容易的處理多個部件的多個事件。事件過濾器是由兩個函式組成的一種操作。兩個函式為installeventfilter eventfilter 實現步驟 1.建立部件 2.為部件安裝過濾器installeventfilter 3.在mainwindows中新增eventfilter處理函...

Qt5布局管理專案示例

專案1 分割視窗qsplitter類 介紹乙個十分簡單的分割視窗功能,整個對話方塊由三個視窗組成,各個視窗之間的大小可隨意拖曳改變 停靠視窗qdockwidget類也是應用程式中經常用到的,設定停靠視窗的一般流程如下。main.cpp include mainwindow.h include inc...