本文講的是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...