现在的位置: 首页 > 综合 > 正文

无边框窗体拖动

2013年10月05日 ⁄ 综合 ⁄ 共 948字 ⁄ 字号 评论关闭

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);

当前窗体的坐标  + (当前坐标 -  开始坐标)

抱歉!评论已关闭.