Qt设置窗口可拖动

Posted 林夕07

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt设置窗口可拖动相关的知识,希望对你有一定的参考价值。

实现逻辑

先来了解下面这个图,箭头表示鼠标,中间的方框表示窗口,最大的边框表示屏幕。

在移动窗口时,鼠标位于窗口的位置始终不变,也叫表示z向量是不变的。所以我们只需要计算出z向量
z = y - x;然后在鼠标移动时获取到鼠标相对于桌面左上角位置也就是y向量。即可计算出窗口左上角的位置:x = y - z;

具体代码

我们需要对鼠标移动、点击、释放事件进行重写。

    virtual void mouseMoveEvent(QMouseEvent *event);
    virtual void mousePressEvent(QMouseEvent *event);
    virtual void mouseReleaseEvent(QMouseEvent *event);

定义一个成员变量用来记录鼠标相对于窗口的位置。

QPoint z;

我们需要在鼠标按下时计算出鼠标相对于窗口的位置并保存,在鼠标移动时实时更新当前窗口的位置。

void Widget::mouseMoveEvent(QMouseEvent *event)

    QWidget::mouseMoveEvent(event);

    QPoint y = event->globalPos(); // 鼠标相对于桌面左上角位置
    QPoint x = y - this->z;

    this->move(x);


void Widget::mousePressEvent(QMouseEvent *event)

    QWidget::mousePressEvent(event);

    QPoint x = this->geometry().topLeft(); // 窗口左上角相对于桌面左上角位置
    QPoint y = event->globalPos(); // 鼠标相对于桌面左上角位置
    this->z = y - x; // 这是个定值



void Widget::mouseReleaseEvent(QMouseEvent *event)

    QWidget::mouseReleaseEvent(event);

    this->z = QPoint();

以上是关于Qt设置窗口可拖动的主要内容,如果未能解决你的问题,请参考以下文章

如何设置可拖动div的起始位置?

Qt - 拖动标题栏时防止窗口调整大小

qt里面怎么设置窗口大小改变不触发update

qt窗口左下角在鼠标位置弹出

qt如何设置常驻

QT怎么设置控件在窗口大小发生变化的时候,使控件始终居于右上角