这一章我们继续讲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类)。 ![]() 更多源码素材下载,编程知识学习请关注公众号:coding教室 ![]() ---------------------------------------------------------------------------------------------------------------------- 我们尊重原创,也注重分享,文章来源于微信公众号:coding教室,建议关注公众号查看原文。如若侵权请联系qter@qter.org。 ---------------------------------------------------------------------------------------------------------------------- |