赞
踩
事件:是对各种应用程序需要知道的由应用程序内部或外部产生的事件或动作的统称。在Qt中任何一个QObject子类实例都可以接收和处理事件。
Qt中事件作为一个对象,继承自QEvent类,常见的有以下几种:
- QKeyEvent 键盘事件
- QMouseEvent 鼠标事件
- QTimerEvent 定时器事件
QEvent常用的函数:
accept() | 设置事件对象的接受标志 ==setAccept(true) |
ignore() | 清除事件对象的接受标志参数 ==setAccept(false) 清除 accept 参数表示事件接收器不需要该事件。不需要的事件可能会传播到父小组件。 |
type() | 返回事件的类型 |
信号和事件的区别:
- 事件由具体的QWidget(子)对象进行处理,信号由具体的QWidget(子)对象进行生成
- 改写事件处理函数可能会导致程序行为发生变化,信号是否存在对应的槽函数不会改变程序的行为
- 通常情况下,信号在具体的事件处理函数中
一个事件是由一个特定的QEvent子类来表示的,但一个事件又可以包含多个事件类型。
处理事件的方法:
常用的方法为第一个和第五个。
事件先传递给获得焦点的窗口部件,如果该部件忽略掉该事件,那么这个事件会传递给这个部件的父部件。重新实现事件处理函数时,一般要调用父类的相应事件处理函数来实现默认操作。
创建一个项目,继承于QWidget
添加一个c++文件,继承于QWidget
修改mylineedit的继承关系,改为继承QLineEdit
在mylineedit.h中
改为:
mylineedit.cpp文件中
改为
这样的话就把继承关系修改为QLineEdit。
在mylineedit.h添加一个按键按下的事件
void keyPressEvent(QEvent *event);//按键按下事件
在mylineedit.cpp中实现
- void mylineEdit::keyPressEvent(QKeyEvent * event)//鼠标按下事件
- {
- qDebug()<<"mylineedit的事件触发"
- }
在widget中创建一个mylineedit对象
在widget.h中添加头文件、一个对象和键盘事件
- #include<mylineedit.h>
-
-
- mylineEdit *line;//一个对象
- void keyPressEvent(QKeyEvent * event)//鼠标按下事件
widget.cpp的构造函数
- resize(800,800);
- line=new mylineEdit(this);
- line->move(100,100);
事件的实现:
- void Widget::keyPressEvent(QKeyEvent * event)//鼠标按下事件
- {
- qDebug()<<"Widget的事件触发"
- }
运行结果为:
当焦点在line中时按下回车,只会触发myline的事件,并不会传递。
修改mylineedit的事件
- void mylineEdit::keyPressEvent(QKeyEvent * event)//鼠标按下事件
- {
- qDebug()<<"myline的事件触发";
- QLineEdit::keyPressEvent(event);//执行QLineEdit的默认事件处理
- event->ignore();//忽略该事件
- }
- QLineEdit::keyPressEvent(event); //执行该市件原有的处理
- event->ignore();//忽略该事件,忽略后可以传给父类事件
执行结果 :
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。