Qt 悬浮窗实战:无边框窗口与拖拽移动
Qt 悬浮窗实战:无边框窗口与拖拽移动
5分钟学会 Qt 无边框窗口,代码可直接运行
效果展示
一个可拖拽的悬浮窗口,包含三个设备监控卡片,每个都有开关按钮。
核心代码
1. 无边框窗口(3行代码)
cpp
setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint); setAttribute(Qt::WA_TranslucentBackground);
2. 鼠标拖拽移动
cpp
void mousePressEvent(QMouseEvent *event) { m_pressed = true; m_dragPoint = event->globalPos() - frameGeometry().topLeft(); } void mouseMoveEvent(QMouseEvent *event) { if (m_pressed) move(event->globalPos() - m_dragPoint); }3. 右键菜单退出
cpp
void contextMenuEvent(QContextMenuEvent *event) { QMenu menu; menu.addAction("退出", qApp, &QApplication::quit); menu.exec(event->globalPos()); }核心类结构
cpp
// MiniWidget - 单个监控卡片 class MiniWidget : public QWidget { // 固定大小100x60 // 包含:图标、标题、状态、开关按钮 // 点击按钮发射 toggled(bool) 信号 }; // TripleWidget - 主窗口 class TripleWidget : public QWidget { // 无边框、置顶、可拖拽 // 包含三个 MiniWidget // 右键菜单退出 };🚀 实现思路
窗口设置:
FramelessWindowHint+WA_TranslucentBackground实现无边框透明背景拖拽逻辑:记录鼠标按下时的偏移量,移动时重新计算位置
自定义组件:封装
MiniWidget实现可复用的卡片右键菜单:重写
contextMenuEvent添加退出选项
常见问题
| 问题 | 解决 |
|---|---|
| 拖拽不流畅 | 检查是否用了globalPos() |
| 背景不透明 | 加上setAttribute(Qt::WA_TranslucentBackground) |
| 无法编译 | 确保.pro有QT += widgets |
更多功能
本文只实现了基础框架。完整版还包含:
🎯 贴边隐藏动画
🎯 真实CPU/内存数据
🎯 系统托盘图标
🎯 开机自启动
源码下载链接:QT悬浮监控工具完整源码(无边框+拖拽+贴边隐藏).zip资源-CSDN下载 VIP会员免费下载,包含: - ✅ 完整Qt工程文件(.h/.cpp/.pro) - ✅ 详细中文注释 - ✅ 贴边隐藏动画 - ✅ 鼠标拖拽移动 可直接编译运行 感谢支持!有问题欢迎评论区留言~
如果对你有帮助,欢迎点赞和收藏!
