QT---消息机制和事件(2)

目录

一、鼠标点击释放移动事件

1.新建子类

 2.修改文件

 2.1在头文件中的有关修改

 2.2在.cpp文件中的有关修改

 3.将UI设计的标签提升至子类

 4.鼠标事件的设置

4.1子类头文件的代码

4.2子类.cpp文件的代码

二、获取鼠标左右键及移动坐标

1.鼠标左右键

1.1鼠标左右键的查找

 1.2在被按下的事件中编写

2.移动坐标

2.1移动坐标中的x,y与globalx,y的区别

 2.2在鼠标移动的事件中编写

三、事件函数的总结


一、鼠标点击释放移动事件

因为QLabel为基类,因此无法直接在其上面写入,需要新建一个子类。

1.新建子类

 2.修改文件

 2.1在头文件中的有关修改

 2.2在.cpp文件中的有关修改

 3.将UI设计的标签提升至子类

 4.鼠标事件的设置

4.1子类头文件的代码

public slots:

protected:
    void mousePressEvent(QMouseEvent *ev);
    void mouseReleaseEvent(QMouseEvent *ev);
    void mouseMoveEvent(QMouseEvent *ev);

4.2子类.cpp文件的代码

#include "zl_label.h"
#include "QDebug"
#include "QMouseEvent"

ZL_label::ZL_label(QWidget *parent) : QLabel(parent)
{
    this->setMouseTracking(true);//设置鼠标追踪,未设置时默认false,即需要点击鼠标后,才触发追踪效果
}

void ZL_label::mousePressEvent(QMouseEvent *ev)
{
    qDebug()<<"标签被鼠标按下";
}

void ZL_label::mouseReleaseEvent(QMouseEvent *ev)
{
    qDebug()<<"标签被鼠标按下后,又释放了";
}

void ZL_label::mouseMoveEvent(QMouseEvent *ev)
{
    qDebug()<<"标签被鼠标按下后,进行了移动";
}

二、获取鼠标左右键及移动坐标

1.鼠标左右键

1.1鼠标左右键的查找

帮助:QMouseEvent--->button--->Qt::MouseButton(选择GUI)

 1.2在被按下的事件中编写

    if(ev->button()== Qt::LeftButton){
         qDebug()<<"标签被鼠标左键按下";  
    }
    else if(ev->button()==Qt::RightButton){
         qDebug()<<"标签被鼠标右键按下";
    }
    else{
       qDebug()<<"标签被其他鼠标按下";  
    }
    

2.移动坐标

2.1移动坐标中的x,y与globalx,y的区别

移动坐标中的x,y与globalx,y分别是标签局部内的坐标,一个是全局的坐标

 2.2在鼠标移动的事件中编写

void ZL_label::mouseMoveEvent(QMouseEvent *ev)
{
    qDebug()<<"标签被鼠标按下后,进行了移动"<<ev->x()<<","<<ev->y();

    QString str;
    str.sprintf("<center><h1>(%d,%d)</h1></center>",ev->x(),ev->y());//使文本居中显示
    this->setText(str);//将str的格式转到标签文本框中
}

三、事件函数的总结

  • 步骤1∶新建tabel类继承QLabel (新建工程,ui绘制label,新增c#类继承QWiget,代码修改继承QLabel,ul绘制label提升新创建label类)
  • 步骤2:帮助文档的使用
  • 步骤3:在.h文件中声明事件函数
  • 步骤4:在.cpp文件中实现事件函数
  • 步骤5:格式设置(提前了)


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值