[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)效果


目录
相关文章
|
1月前
|
存储 机器学习/深度学习 人工智能
Qt魔法书:打造自定义鼠标键盘脚本(二)
Qt魔法书:打造自定义鼠标键盘脚本
35 0
|
1月前
|
存储 开发框架 开发者
QT C++焦点事件:多角度解析实用技巧与方法
QT C++焦点事件:多角度解析实用技巧与方法
159 0
|
2月前
|
API
QT基础入门——Qt事件(五)
QT基础入门——Qt事件(五)
54 0
QT基础入门——Qt事件(五)
|
5月前
|
存储 Cloud Native Linux
Qt 关于mouseTracking鼠标追踪和tabletTracking平板追踪的几点官方说明
Qt 关于mouseTracking鼠标追踪和tabletTracking平板追踪的几点官方说明
|
1月前
|
开发框架 Linux API
Qt魔法书:打造自定义鼠标键盘脚本(一)
Qt魔法书:打造自定义鼠标键盘脚本
23 0
|
1月前
|
测试技术 数据库 C++
Qt C++拖放事件探索之旅:多方法深入解析
Qt C++拖放事件探索之旅:多方法深入解析
120 1
|
1月前
|
网络协议 网络安全 API
Qt 网络编程之美:探索 URL、HTTP、服务发现与请求响应
Qt 网络编程之美:探索 URL、HTTP、服务发现与请求响应
49 1
|
3月前
|
C++
QT 重写控件(QPushButton为例)实现背景图片的切换和鼠标样式切换
一般在QT开发中,使用setCursor()给控件设置鼠标的样式效果(一般是手型和箭头的切换),一般情况下,这个函数也是起作用的,但是一旦调用了全局QApplication::setOverrideCursor()设置鼠标效果后,在使用setCursor给控件设置鼠标样式就不起效果了,这是QT的机制
76 0
|
3月前
Qt鼠标悬浮在图片上显示删除字样
Qt鼠标悬浮在图片上显示删除字样
|
3月前
Qt6学习笔记十二(事件分发器、事件过滤器)
Qt6学习笔记十二(事件分发器、事件过滤器)
26 0

热门文章

最新文章

推荐镜像

更多