[Qt5] 鼠标响应事件和计时器事件

简介: [Qt5] 鼠标响应事件和计时器事件

1.首先介绍一下什么是事件?

       事件(event)是由系统或Qt本身在不同时刻发出的,当用户按下鼠标、敲下键盘,或者是窗口需要重新绘制的时候,都会发出一个相应的事件,一些事件在对用户操作做出响应是发出,如键盘事件等,另一些事件则由系统自动发出,如计时器事件。

2.Qt事件处理机制:

3.鼠标点击事件—单击窗口显示坐标及移动鼠标实时显示坐标

1)对函数进行声明

protected:
  //QMouseEvent 鼠标事件的一些属性,比如点击,释放等 (QKeyEvent 是键盘事件)
  //鼠标点击事件
  void mousePressEvent(QMouseEvent *p);
  //鼠标移动事件
  void mouseMoveEvent(QMouseEvent *p);

注:虚函数的名字、参数、返回值任何一个都不能自己写, 要和基类一样。如果自己写,就属于自己定义函数了,而不是虚函数了。

       查看 mousePressEvent()函数的用法必须在基类QWidget才能看到,在派生类中Event 是看不到的。

虚函数不理解的参考:

https://www.cnblogs.com/to-creat/p/5897465.html

https://blog.csdn.net/haoel/article/details/1948051

2)实现

void Event::mousePressEvent(QMouseEvent *p)
{
  int i = p->x();
  int j = p->y();
  QString cx = QString::number(i);
  QString cy = QString::number(j);
  /*if(p->button() == Qt::LeftButton )
  {
    QString a = QString::fromLocal8Bit("x坐标为:");
      ui.label->setText(a+cx);
  }
  else if(p->button() == Qt::RightButton )
  {
    QString a = QString::fromLocal8Bit("y坐标为:");
      ui.label->setText(a+cy);
  }*/
  QString a = QString::fromLocal8Bit("坐标为:");
    ui.label->setText(a+cx+","+cy);
}
void Event::mouseMoveEvent(QMouseEvent *p)
{
  int i = p->x();
  int j = p->y();
  QString cx = QString::number(i);
  QString cy = QString::number(j);
  QString a = QString::fromLocal8Bit("坐标为:");
  ui.label->setText(a+cx+","+cy);
}

3)设置默认追中鼠标,否则需要单机长按拖动才实时显示坐标

{
  ui.setupUi(this);
  //设定默认追中鼠标
  this->setMouseTracking(true);
}

注:上边是整个窗口坐标都能显示,若只想在label部件上显示坐标,可以新建一个基类为QWidget的类,将下边三处改为QLabel(因为新建类中基类没有QLabel,需要自己手动改),再将label控件提升为新建的类,将实现函数放到新建的类中即可。

4.定时器事件

1)

protected:
  void timerEvent(QTimerEvent *);
  int timeId;//定时器结束id,与定时器开始参数保持一致

2)

可以放在想要计时的程序前面,放 ui.setupUi(this);下面的话,程序开始时就计时

//触发定时器,开始计时
  timeId=this->startTimer(1000);//单位是毫秒   1000毫秒=1秒

3)

void Event::timerEvent(QTimerEvent *e)
{
  //静态的:使用完不释放,一直累加
  static int i = 0;
  QString time = QString::number(i++);
  ui.label1->setText(time);
  //计时器到4秒停止,因为从0开始
  if(i == 5)
  {
  this->killTimer(timeId);
  }
}

4)效果


目录
相关文章
|
6月前
|
存储 机器学习/深度学习 人工智能
Qt魔法书:打造自定义鼠标键盘脚本(二)
Qt魔法书:打造自定义鼠标键盘脚本
214 0
|
6月前
|
存储 开发框架 开发者
QT C++焦点事件:多角度解析实用技巧与方法
QT C++焦点事件:多角度解析实用技巧与方法
1229 0
|
6月前
|
API
QT基础入门——Qt事件(五)
QT基础入门——Qt事件(五)
383 0
QT基础入门——Qt事件(五)
|
1月前
|
存储 Windows
(13) Qt事件系统(two)
文章详细介绍了Qt事件系统,包括事件分发、自定义事件、事件传播机制、事件过滤以及事件与信号的区别。
73 3
(13) Qt事件系统(two)
|
1月前
|
编解码 程序员
(12)Qt事件系统(one)
本文详细介绍了Qt事件系统,包括各种系统事件、鼠标事件、键盘事件、定时器等的处理方法和示例代码。
66 0
(12)Qt事件系统(one)
|
3月前
|
开发者
【Qt 学习笔记】Qt系统相关 | Qt事件 | 事件的介绍及基本概念
【Qt 学习笔记】Qt系统相关 | Qt事件 | 事件的介绍及基本概念
201 4
|
4月前
|
调度
【浅入浅出】Qt多线程机制解析:提升程序响应性与并发处理能力
在学习QT线程的时候我们首先要知道的是QT的主线程,也叫GUI线程,意如其名,也就是我们程序的最主要的一个线程,主要负责初始化界面并监听事件循环,并根据事件处理做出界面上的反馈。但是当我们只限于在一个主线程上书写逻辑时碰到了需要一直等待的事件该怎么办?它的加载必定会带着主界面的卡顿,这时候我们就要去使用多线程。
153 6
|
5月前
Qt事件分发器、事件过滤器
Qt事件分发器、事件过滤器
|
5月前
|
前端开发
自定义QT QWidget对象响应弹出菜单的解决方法
自定义QT QWidget对象响应弹出菜单的解决方法
80 1
|
4月前
|
开发者
Qt中的事件该如何学习?(附带案例)
事件是Qt中比较重要的一部分,在初期如果理解不当学习可能会比较困难,这里提一嘴当初教我的那位老师水平是真的高,让我很轻易的就理解了事件的概念。 在平时我们见到那些界面上的某些快捷键就有可能是事件做的,例如ESC关闭窗口,Enter提交或者登录这种类似的,这也是事件的强大之处。
110 0