[Qt]整体拖动窗口

 

//在Widget的.h文件中增加下面成员
void mouseMoveEvent(QMouseEvent*event);
void mousePressEvent(QMouseEvent*event);
void mouseReleaseEvent(QMouseEvent*event);
QPointdrag Position;

//----------------------------------------------------------------------------
//在Widget的.cpp文件中实现如下
void LoginDialog::mouseReleaseEvent(QMouseEvent *event)
{
    if (event->button() == Qt::LeftButton)
    {
        dragPosition = QPoint(-1, -1);
        event->accept();
    }
}

void LoginDialog::mousePressEvent(QMouseEvent *event)
{
    if (event->button() == Qt::LeftButton)
    {
        dragPosition = event->globalPos() - frameGeometry().topLeft();
        event->accept();
    }
}

void LoginDialog::mouseMoveEvent(QMouseEvent *event)
{
    if (event->buttons() &Qt::LeftButton)
    {
        if (dragPosition != QPoint(-1, -1))
            move(event->globalPos() - dragPosition);
        event->accept();
    }
}

//一般的窗口只能通过标题栏拖动,这个可以在整个界面上(按钮、文本框都控件除外)拖动。
//另外参考Qt的assistant的qthelp://com.trolltech.qt.451/qdoc/widgets-shapedclock.html。
//这里程序的不同在于,LoginDialog界面上还有其他控件,使用QPoint(-1,-1)帮助解决。

你可能感兴趣的:(qt)