QT类之事件mousePressEvent以及mouseMoveEvent

              将一串文字(Label控件)可以随着手标的拖动而到指定位置,重写mousePressEvent函数以及mouseMoveEvent函数:

问题解决步骤(逻辑):
          首先分析题目需求,Label控件可以随着鼠标而拖动,我们知道系统默认的label控件是没有这个功能的,所以需要我们自定义一个MyLabel的类,在MyLabel类当中去重新实现mousePressEvent()以及mouseMoveEvent()函数;
根据QT自带的帮助文档,找到 void QWidget::mousePressEvent ( QMouseEvent * event ) [virtual protected];
                                                void QWidget::mouseMoveEvent ( QMouseEvent * event ) [virtual protected]。
这里有个类QMouseEvent我们不知道,去查找一下发现有globalX(),globalY();
然后我们根据需求进行重写:

QT类之事件mousePressEvent以及mouseMoveEvent_第1张图片QT类之事件mousePressEvent以及mouseMoveEvent_第2张图片

对代码的一下解释:1)我们可以由event->globalX(),event->globalY();得出鼠标在坐标轴中的位置(X,Y);
event->x(),event->y()得出的是鼠标相对于当前空间的坐标,显然我们需要的是global。
2)鼠标点击时的坐标originX,originY设定为我们MyLable类的私有成员,在mouseMoveEvent()函数中,由鼠标拖动引起前后两次变化,来设置我们的标签Label的坐标变换。this->pos()可以得到当前Label的坐标,设置好坐标之后,this->move(pos)来使得Label移动。




你可能感兴趣的:(Qt类,qt)