一般情况下,当去掉窗体标题栏时,按住鼠标左键就无法实现拖动窗体;当去掉窗体标题栏时,窗体四周的边框也去掉了,此时按住鼠标左键拖动窗体四周边沿,无法实现鼠标拖动改变窗体大小。如下为Qt实现去掉窗体标题栏的代码:
 setWindowFlag(Qt::FramelessWindowHint);  // 去掉标题栏
现在的问题是:
 
在去掉窗体标题栏的情况下,如何在窗体上按住鼠标左键,实现移动窗体?
2.实现方法
Qt中有个QSizeGrip类,可以很好解决1节提到的问题,关于该类的具体用法,参见Qt Assistant。
 
代码:
 
private:    //virtual
    void mousePressEvent(QMouseEvent *e) override;
    void mouseReleaseEvent(QMouseEvent *e) override;
    void mouseMoveEvent(QMouseEvent *e) override;

private:
    bool bLeftMousePressed{false};  //鼠标左键是否按下
    QPointF mLastMousePoint;     //鼠标按下时的位置
.cpp文件如下:
void Login::mousePressEvent(QMouseEvent *e){
    if(Qt::LeftButton!= e->button()) return;

    mLastMousePoint = e->globalPosition();
    bLeftMousePressed=true;
}

void Login::mouseReleaseEvent(QMouseEvent *e){
    if(Qt::LeftButton!=e->button()) return;

    bLeftMousePressed =false;
}

void Login::mouseMoveEvent(QMouseEvent *e){
    auto curMousePt = e->globalPosition();
    auto offsetPt = curMousePt-mLastMousePoint;
    move(pos().x()+offsetPt.x(),pos().y()+offsetPt.y());

    mLastMousePoint=curMousePt;
}