作者:hackett
微信公眾號:加班猿
無邊框窗口的實現
只需要一行代碼即可實現
this->setWindowFlags(Qt::FramelessWindowHint);
代碼及運行效果:
無邊框窗口能拖拽實現
先要去QWidget里面找到鼠標事件函數
理一下坐標的位置情況:
左上角:屏幕的左上角
中間的窗口:程序的窗口
箭頭:鼠標位置
坐標位置滿足:x = y - z
在Designer里面拖一個Widget出來叫shadowWidget
shadowWidget的顏色為灰色,我們選個自己喜歡的背景色方便查看
接下來我們要重寫鼠標事件函數才能讓拖拽功能生效
void Widget::mouseMoveEvent(QMouseEvent *event)
{
QPoint y = event->globalPos();//鼠標相當於桌面左上角的位置,鼠標全局位置
QPoint x = y - this->z;
this->move(x);
}
void Widget::mousePressEvent(QMouseEvent *event)
{
QPoint y = event->globalPos();//鼠標相當於桌面左上角的位置,鼠標全局位置
QPoint x = this->geometry().topLeft();//窗口左上角位於桌面左上角的位置,窗口位置
this->z = y - x; //定值,不變
}
void Widget::mouseReleaseEvent(QMouseEvent *event)
{
this->z = QPoint(); //鼠標松開獲取當前的坐標
}
最終效果變為鼠標可拖動的窗口:
源碼:
widget.cpp
widget.h
如果你覺得文章還不錯,記得"點贊關注"
關注我的微信公眾號【 加班猿 】可以獲取更多內容