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();
}
目录
相关文章
|
4月前
|
C++ Windows
Qt 窗口置顶
Qt 窗口置顶
131 1
|
4月前
【Qt 学习笔记】Qt窗口 | 标准对话框 | 输入对话框QInputDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 输入对话框QInputDialog
330 3
|
4月前
|
数据可视化
【Qt 学习笔记】Qt窗口 | 标准对话框 | 字体对话框QFontDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 字体对话框QFontDialog
109 3
|
4月前
|
网络协议
【qt】TCP的监听 (设置服务器IP地址和端口号)
【qt】TCP的监听 (设置服务器IP地址和端口号)
271 0
|
4月前
【qt】视口和窗口坐标
【qt】视口和窗口坐标
39 0
|
4月前
|
算法 数据安全/隐私保护
【qt】启动窗口的玩法
【qt】启动窗口的玩法
36 0
|
4月前
【qt】多窗口开发
【qt】多窗口开发
78 0
|
5月前
|
数据安全/隐私保护 C++ 计算机视觉
Qt(C++)开发一款图片防盗用水印制作小工具
文本水印是一种常用的防盗用手段,可以将文本信息嵌入到图片、视频等文件中,用于识别和证明文件的版权归属。在数字化和网络化的时代,大量的原创作品容易被不法分子盗用或侵犯版权,因此加入文本水印成为了保护原创作品和维护知识产权的必要手段。 通常情况下,文本水印可以包含版权声明、制作者姓名、日期、网址等信息,以帮助识别文件的来源和版权归属。同时,为了增强防盗用效果,文本水印通常会采用字体、颜色、角度等多种组合方式,使得水印难以被删除或篡改,有效地降低了盗用意愿和风险。 开发人员可以使用图像处理技术和编程语言实现文本水印的功能,例如使用Qt的QPainter类进行文本绘制操作,将文本信息嵌入到图片中,
199 1
|
4月前
|
监控 C++ 容器
【qt】MDI多文档界面开发
【qt】MDI多文档界面开发
118 0