这一章我们继续讲Qt事件——事件的传递
1、创建工程
工程目录如下所示:
创立工程testEvent,主窗口文件以mainwindow命名,子文件以lineedit命名。
2、修改程序
首先将lineedit.h文件内容修改如下:
这里主要是添加了keyPressEvent()函数的声明。下面转到lineedit.cpp文件中。文件内容如下:
lineedit.cpp主要就是对lineedit.h的具体实现。下面进入mainwindow.h,内容如下:
红框是值得注意增加的内容,然后进入mainwindow.cpp文件中,添加内容如下:
红框分别是添加的代码代码。当然要注意头文件。
这里自定义了一个Lineedit类,它集成自QLineedit类,,然后再MainWindow中添加一个Lineedit部件。分别实现了Lineedit类和MainWindow类的键盘按下事件处理函数。
3、执行程序
下面运行程序,在窗口中按下任意按键,如回车,输出栏输出:
说明此时只有LineEdit类的键盘按下事件处理函数运行了,在lineedit.cpp文件的keyPressEvent()函数最后一行添加代码:
event->ignore();
此时应用输出:
要想输出栏能正常输出数字,在lineedit.cpp文件的keyPressEvent()前面添加默认事件处理函数即可。
4、分析结论:
这个例子中事件处理方式是采用重写部件的keyPressEvent()函数来实现。
事件是先传递给指定窗口部件(Lineedit类焦点部件)。如果该部件忽略掉该事件,那么事件就会传递给这个部件的父部件(MainWindow类)。
网友评论