未设置的窗口
this->setWindowFlag(Qt::FramelessWindowHint); // 隐藏标题栏
this->setAttribute(Qt::WA_TranslucentBackground,true); //设置窗口透明
这样设置窗口后,会导致无法拖动窗口。
可以通过重写QWidget的鼠标事件函数来解决:
void frameless::mousePressEvent(QMouseEvent *event)
{
QPoint mousePos = event->globalPos(); //获取鼠标相对与屏幕的坐标
QPoint topLeft = this->geometry().topLeft(); //获取窗口左上角坐标
winPos = mousePos - topLeft; //获取鼠标相对于窗口左上角的坐标
}
在鼠标按下的那一刻,获取鼠标相对屏幕的坐标减去窗口左上角在屏幕中的坐标,得到鼠标相对与窗口左上角的坐标
void frameless::mouseMoveEvent(QMouseEvent *event)
{
QPoint mousePos = event->globalPos(); //获取鼠标相对与屏幕的坐标
this->move(mousePos - winPos); //移动窗口
}
在鼠标移动的过程中持续不断获取并更新鼠标的位置,用移动中的坐标减去,按下时的坐标就可以根据这个值来更新窗口的位置。
void frameless::mouseMoveEvent(QMouseEvent *event)
{
QPoint mousePos = event->globalPosition().toPoint(); //获取鼠标相对与屏幕的坐标
this->move(mousePos - winPos); //移动窗口
}
然后就可以点击窗口中的像素点就可以拖动窗口移动了