這一章我們繼續(xù)講Qt事件——事件的傳遞
1、創(chuàng)建工程
工程目錄如下所示:
創(chuàng)立工程testEvent,主窗口文件以mainwindow命名,子文件以lineedit命名薇溃。
2、修改程序
首先將lineedit.h文件內(nèi)容修改如下:
這里主要是添加了keyPressEvent()函數(shù)的聲明干奢。下面轉(zhuǎn)到lineedit.cpp文件中痊焊。文件內(nèi)容如下:
lineedit.cpp主要就是對lineedit.h的具體實(shí)現(xiàn)盏袄。下面進(jìn)入mainwindow.h忿峻,內(nèi)容如下:
紅框是值得注意增加的內(nèi)容,然后進(jìn)入mainwindow.cpp文件中辕羽,添加內(nèi)容如下:
紅框分別是添加的代碼代碼逛尚。當(dāng)然要注意頭文件。
這里自定義了一個Lineedit類刁愿,它集成自QLineedit類绰寞,,然后再M(fèi)ainWindow中添加一個Lineedit部件。分別實(shí)現(xiàn)了Lineedit類和MainWindow類的鍵盤按下事件處理函數(shù)滤钱。
3觉壶、執(zhí)行程序
下面運(yùn)行程序,在窗口中按下任意按鍵件缸,如回車铜靶,輸出欄輸出:
說明此時只有LineEdit類的鍵盤按下事件處理函數(shù)運(yùn)行了,在lineedit.cpp文件的keyPressEvent()函數(shù)最后一行添加代碼:
event->ignore();
此時應(yīng)用輸出:
要想輸出欄能正常輸出數(shù)字他炊,在lineedit.cpp文件的keyPressEvent()前面添加默認(rèn)事件處理函數(shù)即可争剿。
4、分析結(jié)論:
這個例子中事件處理方式是采用重寫部件的keyPressEvent()函數(shù)來實(shí)現(xiàn)痊末。
事件是先傳遞給指定窗口部件(Lineedit類焦點(diǎn)部件)蚕苇。如果該部件忽略掉該事件,那么事件就會傳遞給這個部件的父部件(MainWindow類)凿叠。