Qt设置窗口可拖动

简介: 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();
}
目录
相关文章
|
5月前
|
存储 编解码 Cloud Native
C++ Qt关于多屏幕窗口处理
C++ Qt关于多屏幕窗口处理
|
API 计算机视觉
Qt实用技巧:自定义窗口标题栏
Qt实用技巧:自定义窗口标题栏
Qt实用技巧:自定义窗口标题栏
pyqt5 无边框窗口拖动
pyqt5 无边框窗口拖动
|
26天前
QT取消标题栏,如何实现窗口移动
QT取消标题栏,如何实现窗口移动
|
5月前
|
C语言 Python
PyQt5-如何设置应用和窗口的图标?控件的提示信息如何设置?
PyQt5-如何设置应用和窗口的图标?控件的提示信息如何设置?
31 1
|
3月前
Qt 控件大小随着窗口的大小而变化设置
Qt 控件大小随着窗口的大小而变化设置
60 0
C#创建无边框可拖动窗口
C#创建无边框可拖动窗口
171 0
|
C++ Windows
2.1 窗口和控件
2.1 窗口和控件
2.1 窗口和控件
MFC修改窗口背景颜色
MFC修改窗口背景颜色
220 0
Qt隐藏系统标题栏,使用自定义标题栏
Qt隐藏系统标题栏,使用自定义标题栏
Qt隐藏系统标题栏,使用自定义标题栏

推荐镜像

更多