手把手教QT—9.事件

  Qt的事件是整个Qt框架的核心机制之一,在Qt中所有事件类都继承于QEvent。Qt有很多种事件,比如说点下鼠标会触发鼠标事件,按下键盘会触发键盘事件,关闭窗口会触发关闭事件,我们之前学过的信号,其实也是事件的一种。我们可 以在帮助手册中的QWidget的
Protected Functions和Events下查看有哪些事件函数。

  回顾之前学过的main()函数,最后总是有一条语句return a.exec()。这个exec()就是在监听应用程序的事件,当它监测到事件,转换成相应的对象,此时在事件处理器中,会判断这是什么事件,判断完成后调用相应的事件函数,这很类似于硬件的中断。

  事件的处理函数都是保护类型,并且都是虚函数,虚函数在基类中声明,在子类中重新实现,所以虚函数的名字、参数、返回值都不能改变。接下来我们拿一个实例来举例说明。

工程示例

  在这个工程中,我们要实现的是在一个标签控件上移动鼠标,标签显示鼠标坐标。首先新建QWidget基类工程,将Qlabel控件放置在窗口中并布局。

  上节有学过自定义控件,这节将实现在Qlabel控件之上做移动鼠标,那么本节将会对Qlabel控件做提升操作。在工程中添加新文件,添加一个新的C++ Class,这里基类选择中并没有QLabel,可以先选择QWidget,在后面做修改;

  生成文件之后,因为是要给Qlabel控件做提升,所以在新生成的.h和.cpp的文件中将QWidget基类改成QLabel基类。


  接下来重新实现事件处理函数,如果忘记是用哪个事件的处理函数,可以在帮助文档中的QWidget的
Protected Functions和Events下查询。在.h头文件中,包含进鼠标事件的头文件#include <QMouseEvent>,并且事件的处理函数重定义在保护类型下。

  .h文件代码如下:

#ifndef LABEL_MOUSE_H
#define LABEL_MOUSE_H

#include <QWidget>
#include <QLabel>
#include <QMouseEvent>

class label_mouse : public QLabel
{
    Q_OBJECT
public:
    explicit label_mouse(QWidget *parent = nullptr);

signals:
public slots:
protected:
    void mouseMoveEvent(QMouseEvent *ev);   //鼠标移动事件
};

#endif // LABEL_MOUSE_H

  cpp文件代码就很简单了:

#include "label_mouse.h"

label_mouse::label_mouse(QWidget *parent) : QLabel(parent)
{
    this->setMouseTracking(true);
}


void label_mouse::mouseMoveEvent(QMouseEvent *ev)
{
    QString text=QString("鼠标坐标:(%1,%2)").arg(ev->x()).arg(ev->y());
    this->setText(text);
}

  其中this->setMouseTracking(true);为配置是否启用鼠标跟踪。当参数为false时(默认参数),则控件仅在鼠标被移动时并至少按下一次鼠标时,才会接收鼠标移动事件。当参数为true时,那么即使没有按下鼠标,控件也会接收到鼠标移动事件。

  并且我们可以通过QMouseEvent帮助文档得知,可以通过x(),y()函数获取鼠标坐标。

  接下来对Qlabel控件做提升。


  此时编译运行:





点亮在看,扫码关注我吧


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了使更多的Qt初学者能尽快入门Qt,也为了QtQt Creator的快速普及,我们花费大量精力写出了这一系列程。虽然程的知识可能很浅显,虽然程的语言可能不规范,但是它却被数十万网友所认可。我们会将这一系列程一直写下去,它将涉及Qt的方方面面 一、Qt Creator的安装和hello world程序的编写 二、Qt Creator编写多窗口程序 三、Qt Creator登录对话框 四、Qt Creator添加菜单图标 五、Qt Creator布局管理器的使用 六、Qt Creator实现文本编辑 七、Qt Creator实现文本查找 八、Qt Creator实现状态栏显示 九、Qt Creator中鼠标键盘事件的处理实现自定义鼠标指针 十、Qt Creator中实现定时器和产生随机数 十一、Qt 2D绘图(一)绘制简单图形 十二、Qt 2D绘图(二)渐变填充 十三、Qt 2D绘图(三)绘制文字 十四、Qt 2D绘图(四)绘制路径 十五、Qt 2D绘图(五)显示图片 十六、Qt 2D绘图(六)坐标系统 十七、Qt 2D绘图(七)Qt坐标系统深入 十八、Qt 2D绘图(八)涂鸦板 十九、Qt 2D绘图(九)双缓冲绘图简介 二十、Qt 2D绘图(十)图形视图框架简介 二十一、Qt数据库(一)简介 二十二、Qt数据库(二)添加MySQL数据库驱动插件 二十三、Qt数据库(三)利用QSqlQuery类执行SQL语句(一) 二十四、Qt数据库(四)利用QSqlQuery类执行SQL语句(二) 二十五、Qt数据库(五)QSqlQueryModel 二十六、Qt数据库(六)QSqlTableModel 二十七、Qt数据库(七)QSqlRelationalTableModel 二十八、Qt数据库(八)XML(一) 二十九、Qt数据库(九)XML(二) 三十、Qt数据库(十)XML(三) 三十一、Qt 4.7.0及Qt Creator 2.0 beta版安装全程图解 三十二、第一个Qt Quick程序(QML程序) 三十三、体验QML演示程序 三十四、Qt Quick Designer介绍 三十五、QML组件 三十六、QML项目之Image和BorderImage 三十七、Flipable、Flickable和状态与动画 三十八、QML视图 三十九、QtDeclarative模块 四十、使用Nokia Qt SDK开发Symbian和Maemo终端软件 四十一、Qt网络(一)简介 四十二、Qt网络(二)HTTP编程 四十三、Qt网络(三)FTP(一) 四十四、Qt网络(四)FTP(二) 四十五、Qt网络(五)获取本机网络信息 四十六、Qt网络(六)UDP 四十七、Qt网络(七)TCP(一) 四十八、Qt网络(八)TCP(二)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值