lesson9-QT事件

简介: 一、事件 Qt除了通过信号和槽的机制来实现一些动作,还可以通过事件来实现一些动作。当鼠标点击时会有事件产生,当键盘按下时会有事件产生,画图的时候也会有事件产生。 当编写Qt程序时,很少要考虑事件,因为当重要的事情发生时,Qt会发出信号。
一、事件
Qt除了通过信号和槽的机制来实现一些动作,还可以通过事件来实现一些动作。当鼠标点击时会有事件产生,当键盘按下时会有事件产生,画图的时候也会有事件产生。


当编写Qt程序时,很少要考虑事件,因为当重要的事情发生时,Qt会发出信号。当我们需要实现一个自己的控件或者修改先有的Qt行为时,事件才会产生作用。

如何区分事件和信号呢?当我们使用窗口部件的时候,信号起作用;当我们需要实现一个窗口部件时,事件起作用。也就是是事件是更接近底层的,而信号则是上层的

处理事件的是QObject,任何一个想要接受并处理事件的对象均需要继承自QObject。可以选择重载QObject::event(),或者将处理权交给父类。

二、常见的事件
1、QMouseEvent
QMouseEvent是鼠标事件,当有鼠标按下、松开、移动的时候就会产生鼠标事件

QMouseEvent有三个事件处理函数:
mouseMoveEvent(QMouseEvent *e),鼠标移动事件
mousePressEvent(QMouseEvent *e),鼠标点击事件
mouseReleaseEvent(QMouseEvent *e),松开鼠标事件
当产生了事件之后,对应的事件处理函数会自动被调用

事件的使用方法:
1、首先要在类中注册事件处理函数
2、然后要实现事件处理函数
3、在事件处理函数中可以实现自己的代码

e->button() 返回按下的按钮,可以是:
Qt::LeftButton、Qt::RightButton、Qt::MidButton
e->x()  e->y()可以返回鼠标的坐标

2、QKeyEvent
QKeyEvent是描述键盘事件的,当有键盘按下或者释放就会产生键盘事件
QKeyEvent有两个事件处理函数
keyPressEvent(QKeyEvent *e)
keyReleaseEvent(QKeyEvent *e)


e->modifiers()返回按钮修饰符(alt ctrl之类的按钮)

e->key()返回按下的按钮 

3、QTimerEvent
QTimerEvent是定时器事件,事件处理函数:
timerEvent(QTimerEvent *e)
e->timerId()//得到定时器Id


Qt可以启动多个定时器,定时器的ID>0
启动定时器
startTimer(30); //单位是毫秒,返回定时器id
关闭定时器
killTimer(id);

三、案列
头文件

点击(此处)折叠或打开

  1. #ifndef MYEVENT_H
  2. #define MYEVENT_H

  3. #include QtGui>

  4. class MyEvent : public QDialog
  5. {
  6. Q_OBJECT
  7. public:
  8.     MyEvent();
  9. private:
  10.     QLabel *posLabel;
  11.     int time;
  12.     void mousePressEvent(QMouseEvent *e);
  13.     void mouseMoveEvent(QMouseEvent *e);
  14.     void mouseReleaseEvent(QMouseEvent *e);
  15.     void keyPressEvent(QKeyEvent *e);
  16.     void timerEvent(QTimerEvent *e);
  17. };

  18. #endif
cpp

点击(此处)折叠或打开

  1. #include "MyEvent.h"

  2. MyEvent::MyEvent()
  3. {
  4.     time = 0;
  5.     startTimer(1000);
  6.     posLabel = new QLabel("position");
  7.     QHBoxLayout *lay = new QHBoxLayout();
  8.     lay->addWidget(posLabel);
  9.     setLayout(lay);
  10.     setWindowTitle("Event");
  11.     resize(500, 500);
  12. }
  13. #if 1
  14. void MyEvent::mousePressEvent(QMouseEvent *e)
  15. {
  16.     switch(e->button())
  17.     {
  18.         case Qt::LeftButton:
  19.             posLabel->setText("Left press");
  20.             break;
  21.         case Qt::RightButton:
  22.             posLabel->setText("right press");
  23.             break;
  24.         case Qt::MidButton:
  25.             posLabel->setText("Middle press");
  26.             break;
  27.     }
  28. }
  29. void MyEvent::mouseMoveEvent(QMouseEvent *e)
  30. {
  31.     posLabel->setText(QString::number(e->x())+ "," +QString::number(e->y()));
  32. }
  33. void MyEvent::mouseReleaseEvent(QMouseEvent *e)
  34. {

  35. }
  36. void MyEvent::keyPressEvent(QKeyEvent *e)
  37. {
  38.     switch(e->key())
  39.     {
  40.         case Qt::Key_A:
  41.             posLabel->setText(QString::number(Qt::Key_A));
  42.             break;
  43.         case Qt::Key_S:
  44.             posLabel->setText(QString::number(Qt::Key_S));
  45.             break;
  46.         default:
  47.             break;
  48.     }
  49. }
  50. #endif
  51. #if 1
  52. void MyEvent::timerEvent(QTimerEvent *e)
  53. {
  54.     time++;
  55.     posLabel->setText(QString::number(time));
  56. }
  57. #endif



 

相关文章
|
7月前
|
存储 开发框架 开发者
QT C++焦点事件:多角度解析实用技巧与方法
QT C++焦点事件:多角度解析实用技巧与方法
1355 0
|
7月前
|
API
QT基础入门——Qt事件(五)
QT基础入门——Qt事件(五)
422 0
QT基础入门——Qt事件(五)
|
存储 Cloud Native 程序员
C++ Qt 事件(event)
C++ Qt 事件(event)
24 QT - 事件
24 QT - 事件
41 0
|
2月前
|
存储 Windows
(13) Qt事件系统(two)
文章详细介绍了Qt事件系统,包括事件分发、自定义事件、事件传播机制、事件过滤以及事件与信号的区别。
97 3
(13) Qt事件系统(two)
|
2月前
|
编解码 程序员
(12)Qt事件系统(one)
本文详细介绍了Qt事件系统,包括各种系统事件、鼠标事件、键盘事件、定时器等的处理方法和示例代码。
91 0
(12)Qt事件系统(one)
|
4月前
|
开发者
【Qt 学习笔记】Qt系统相关 | Qt事件 | 事件的介绍及基本概念
【Qt 学习笔记】Qt系统相关 | Qt事件 | 事件的介绍及基本概念
220 4
|
6月前
Qt事件分发器、事件过滤器
Qt事件分发器、事件过滤器
|
5月前
|
开发者
Qt中的事件该如何学习?(附带案例)
事件是Qt中比较重要的一部分,在初期如果理解不当学习可能会比较困难,这里提一嘴当初教我的那位老师水平是真的高,让我很轻易的就理解了事件的概念。 在平时我们见到那些界面上的某些快捷键就有可能是事件做的,例如ESC关闭窗口,Enter提交或者登录这种类似的,这也是事件的强大之处。
126 0
|
7月前
|
开发框架 算法 程序员
【Qt 元对象系统】深入探索Qt事件过滤:从基础到高级应用
【Qt 元对象系统】深入探索Qt事件过滤:从基础到高级应用
207 7