qt 窗口可拖动
参考:https://blog.csdn.net/qq_45254369/article/details/125878621
左键按住,拖动窗口
头文件:
#ifndef FRAME_H #define FRAME_H #include <QFrame> namespace Ui { class Frame; } class Frame : public QFrame { Q_OBJECT public: explicit Frame(QWidget *parent = nullptr); ~Frame(); protected: virtual void mouseMoveEvent(QMouseEvent *event); virtual void mousePressEvent(QMouseEvent *event); virtual void mouseReleaseEvent(QMouseEvent *event); bool m_bPressed;//是否在窗口点击鼠标左键(非点击到窗口按钮上),解决按住按钮后,移动到按钮外时,窗口会乱飘的问题 QPoint z; private: Ui::Frame *ui; }; #endif // FRAME_H
源文件:
#include "frame.h" #include "ui_frame.h" #include <QMouseEvent> Frame::Frame(QWidget *parent) : QFrame(parent), ui(new Ui::Frame) { ui->setupUi(this); this->setWindowFlags(Qt::Window | Qt::FramelessWindowHint); m_bPressed = false; } Frame::~Frame() { delete ui; } void Frame::mouseMoveEvent(QMouseEvent *event) { if(!m_bPressed){ return; } QWidget::mouseMoveEvent(event); QPoint y = event->globalPos(); // 鼠标相对于桌面左上角位置 QPoint x = y - this->z; this->move(x); } void Frame::mousePressEvent(QMouseEvent *event) { m_bPressed = true; QWidget::mousePressEvent(event); QPoint x = this->geometry().topLeft(); // 窗口左上角相对于桌面左上角位置 QPoint y = event->globalPos(); // 鼠标相对于桌面左上角位置 this->z = y - x; // 这是个定值 } void Frame::mouseReleaseEvent(QMouseEvent *event) { m_bPressed = false; QWidget::mouseReleaseEvent(event); this->z = QPoint(); }
ui文件:
<?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> <class>Frame</class> <widget class="QFrame" name="Frame"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>400</width> <height>300</height> </rect> </property> <property name="windowTitle"> <string>Frame</string> </property> <property name="styleSheet"> <string notr="true">background-color: rgb(0, 255, 255);</string> </property> <property name="frameShape"> <enum>QFrame::StyledPanel</enum> </property> <property name="frameShadow"> <enum>QFrame::Raised</enum> </property> </widget> <resources/> <connections/> </ui>
调用方法:
void MainWindow::on_btnFrameless_clicked() { Frame* frame = new Frame(this); frame->show(); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具