![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/8f6d2e79bdab1ac3bdbd36bda260b2c6.gif)
QPoint globalPos;
QSize basicSize;
bool pressed = false;
bool canMove = false;
uchar moveType = 0;
void mousePressEvent(QMouseEvent *event) override;
void mouseMoveEvent(QMouseEvent *event) override;
void mouseReleaseEvent(QMouseEvent*) override;
#include <QMouseEvent>
Widget::Widget(QWidget *parent) : QWidget(parent)
{
setMouseTracking(true);
}
void Widget::mousePressEvent(QMouseEvent *event)
{
pressed = true;
globalPos = event->globalPos();
basicSize = size();
}
void Widget::mouseMoveEvent(QMouseEvent *event)
{
if(pressed){
QPoint p = event->globalPos();
if(canMove){
QSize tempSize = basicSize;
if(moveType & 1){
int width = basicSize.width() + p.x() - globalPos.x();
tempSize.setWidth(width >= 50 ? width : 50);
}
if(moveType & 2){
int height = basicSize.height() + p.y() - globalPos.y();
tempSize.setHeight(height >= 50 ? height : 50);
}
resize(tempSize);
}else{
this->move(x() - globalPos.x() + p.x(), y() - globalPos.y() + p.y());
globalPos = p;
}
}else{
moveType = 3;
moveType &= (event->pos().x() + 10 >= width() ? 255 : 254);
moveType &= (event->pos().y() + 10 >= height() ? 255 : 253);
switch (moveType) {
case 0: setCursor(Qt::ArrowCursor);break;
case 1: setCursor(Qt::SizeHorCursor);break;
case 2: setCursor(Qt::SizeVerCursor);break;
case 3: setCursor(Qt::SizeFDiagCursor);break;
default: break;
}
canMove = (moveType > 0);
}
}
void Widget::mouseReleaseEvent(QMouseEvent*)
{
pressed = false;
}