【QT】——事件处理系统

目录

1.事件介绍

2.QT事件的产生

3.事件处理函数

3.1鼠标事件

3.2键盘事件

3.3窗口重绘事件

3.4窗口关闭事件

3.5窗口大小变化事件

4. 重写事件处理函数


1.事件介绍

QT 程序是事件驱动的, 程序的每个动作都是由内部某个事件所触发。QT 事件的发生和处理 成为程序运行的主线,存在于程序整个生命周期。

常见的 QT 事件类型如下:

  • 键盘事件: 按键按下和松开
  • 鼠标事件: 鼠标移动,鼠标按键的按下和松开
  • 拖放事件: 用鼠标进行拖放
  • 滚轮事件: 鼠标滚轮滚动
  • 绘屏事件: 重绘屏幕的某些部分
  • 定时事件: 定时器到时,比如设定一个定时器,定时器到时,则触发定时事件
  • 焦点事件: 键盘焦点移动
  • 进入和离开事件: 鼠标移入 widget 之内,或是移出
  • 移动事件: widget 的位置改变
  • 大小改变事件: widget 的大小改变
  • 显示和隐藏事件: widget 显示和隐藏
  • 窗口事件: 窗口是否为当前窗口

QT 将系统产生的消息转化为 QT 事件,QT 事件被封装为对象,所有的 QT 事件均继承抽象类 QEvent,用于描述程序内部或外部发生的动作。

2.QT事件的产生

  • 用户操作产生事件被操作系统给捕获,比如:键盘按钮,鼠标按键,鼠标滚轮产生对应的事件。
  • 操作系统捕获事件放进消息队列中
  • QtGUI应用程序检测到相应的事件,从内核中获取事件,并将事件封装为QEvent 分发到相应的QWidget对象。
  • 相应的 QWidget 中的 event(QEvent *)进行事件处理会对事件进行处理
  • event(QEvent *)会根据事件类型调用不同 的事件处理函数。
  • 在事件处理函数中发送 QT 预定义的信号,最终调用信号关联的槽函数

3.事件处理函数

 Qt 提供的事件处理器函数都是回调函数,也就是说作为使用者我们只需要指定函数的处理动作,关于函数的调用是不需要操心的,当某个事件被触发,Qt 框架会调用对应的事件处理器函数

如何查找事件处理函数?

进入帮助文档。 

在Protected Function中,只要函数名后缀带有Event都是事件处理函数

3.1鼠标事件

//当当鼠标左键、鼠标右键、鼠标中键被按下,该函数被自动调用
//通过参数可以得到当前按下的是哪个鼠标键
[virtual protected] void QWidget::mousePressEvent(QMouseEvent *event);

//当鼠标左键、鼠标右键、鼠标中键被释放,该函数被自动调用,
//通过参数可以得到当前释放的是哪个鼠标键
[virtual protected] void QWidget::mouseReleaseEvent(QMouseEvent *event);

//鼠标移动事件
//当鼠标移动(也可以按住一个或多个鼠标键移动),该函数被自动调用
//通过参数可以得到在移动过程中哪些鼠标键被按下了。
[virtual protected] void QWidget::mouseMoveEvent(QMouseEvent *event);

//当鼠标双击该函数被调用,通过参数可以得到哪一鼠标键进行双击
[virtual protected] void QWidget::mouseDoubleClickEvent(QMouseEvent *event);

//当鼠标进入窗口的一瞬间,触发该事件,注意:只在进入的瞬间触发一次该事件
[virtual protected] void QWidget::enterEvent(QEvent *event);

//当鼠标离开窗口的一瞬间,触发该事件,注意:只在离开的瞬间触发一次该事件
[virtual protected] void QWidget::leaveEvent(QEvent *event);

3.2键盘事件

//当键盘上的按键被按下了,该函数被自动调用,通过参数可以得知按下的是哪个键
[virtual protected] void QWidget::keyPressEvent(QKeyEvent *event);

//当键盘上的按键被释放了,该函数被自动调用,通过参数可以得知释放的是哪个键。
[virtual protected] void QWidget::keyReleaseEvent(QKeyEvent *event);

3.3窗口重绘事件

[virtual protected] void QWidget::paintEvent(QPaintEvent *event);

当窗口刷新时,该窗口会被自动调用。比如:

  • 窗口大小变化
  • 窗口隐藏了,窗口显示出来
  • 调用update()函数

3.4窗口关闭事件

[virtual protected] void QWidget::closeEvent(QCloseEvent *event);

当窗口标题栏的关闭按钮被按下并且在窗口关闭之前该函数被调用,可以通过该函数控制窗口是否被关闭。

3.5窗口大小变化事件

[virtual protected] void QWidget::resizeEvent(QResizeEvent *event);

当窗口的大小发生变化,该函数被调用。

4. 重写事件处理函数

Qt自带事件处理函数都有默认处理动作,如果我们不想使用事件处理函数函数默认动作,我们可以

自定义该事件的处理动作。

步骤:

  1. 自定义一个窗口类,继承某个窗口类
  2. 在自定义窗口类重写事件处理函数即可
 

示例:

  • 窗口大小变化是,高度和宽度的值.
  • 窗口移动时,坐标中的值也发生变化。

 

//重写resizeEvent和moveEvent事件

void MainWindow::resizeEvent(QResizeEvent*)
{
    geoUpdate();
}


  void MainWindow::moveEvent(QMoveEvent*)
  {
      geoUpdate();
  }

 void MainWindow::geoUpdate()
 {
     //获取位置信息
     //geometry()函数是QWidet中公共成员函数
     //它获取的是窗口的左上标的位置,以及窗口的宽度,高度
     QRect rect=geometry();
     QString x=QString::number(rect.x());
     QString y=QString::number(rect.y());

     QString height=QString::number(rect.height());
     QString width=QString::number(rect.width());

     ui->coordiante_line->setText("( "+x+","+y+" )");
     ui->heigth_line->setText(height);
     ui->wid_line->setText(width);
 }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值