事件
Qt中使用一个对象表示一个事件,继承自QEvent类。任何QObject子类实例都可以接收和处理事件。
事件的处理
QCoreApplication类的notify()函数给出了5种处理事件的方法。
- 方法一、最常用。重新实现部件的paintEvent()、mousePressEvent()等事件处理函数。只能用来处理特定部件的特定事件。
- 方法二、需要继承QApplication类。重新实现notify()函数。提供完全控制,可以再事件过滤器得到事件之前就获得它们。一次只能处理一个事件。
- 方法三、向QApplication对象上安装事件过滤器。相对方法二,可以处理多个事件。但是会减缓事件的传递。
- 方法四、重新实现event()函数。QObject类的event()函数可以在事件到达默认的事件处理函数之前获得该事件。
- 方法五、较常用。在对象上安装事件过滤器。使用事件过滤器可以在一个界面类中同时处理不同子部件的不同事件。
鼠标事件
QMouseEvent类用来表示一个鼠标事件。
QWheelEvent类用来表示鼠标滚轮事件。
常用函数:
protected:
void mousePressEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
void mouseDoubleClickEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
void wheelEvent(QWheelEvent *event);
在mouseMoveEvent()中要使用event->buttons()
键盘事件
QKeyEvent类用来描述键盘事件。
key()函数可以获取具体的按键。
回车键是Qt::Key_Return;
修饰键ctrl、shift要用modifiers()函数来获取。
定时器事件
QTimeEvent类用来描述一个定时器事件。
QTimer类更常用。
函数singleShot()函数用来开启只运行一次的定时器。
QTimer::singleShot(10000,this,&Widget::close);
随机数
使用qrand()函数时,要使用qsrand()函数来设置初值。
事件过滤器
用来在一个部件中监控其他多个部件的的事件。不是一个类,只用两个函数installEventFillter()和eventFilter(),都是QObject类中的函数。
配合判断使用。