http://blog.csdn.net/aqtata/article/details/8902889#comments
設定無邊框 setWindowFlags(Qt::FramelessWindowHint);
直接上代碼
void TanChu::mousePressEvent(QMouseEvent * event){ qDebug() << this->pos(); if(event->button() == Qt::LeftButton) { m_dragPointion = event->globalPos() - this->pos(); // 就是滑鼠現在的位置和視窗左上方的距離 m_pressPoint = event->pos(); //滑鼠按下,相對視窗的位置 event->accept(); }}void TanChu::mouseMoveEvent(QMouseEvent * event){ if(event->buttons() && Qt::LeftButton) { int distance = (event->pos() - m_pressPoint).manhattanLength(); if(distance >= QApplication::startDragDistance()) { //放置使用者手抖產生移動 move(event->globalPos() - m_dragPointion); event->accept(); } }}
如果不考慮跨平台,只針對Windows平台,那麼我建議用Windows下的標準方法,類比標題列移動訊息
要 #include "windows.h"
void TanChu::mouseMoveEvent(QMouseEvent * event){ if (ReleaseCapture()) SendMessage(HWND(this->winId()), WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0); event->ignore();}
今天又發現更容易的寫法 記載一下
在 mouseMoveEvent(QMouseEvent
*e) 寫這麼一句話
this->move(this->pos() + m_mouseDstPos - m_mouseSrcPos);
當前表單的座標 + (當前座標 - 開始座標)